Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

テーブルとマトリックスは違う?

質問したいこと

テーブルとマトリックスは異なるものであるのか。
異なるのであれば、どう異なっているのか。

質問が生じた経緯

とあるエンジニアの方が、テーブルからデータを取得するというニュアンスは多次元配列のデータを一意に特定することに近い。なので、多次元配列はマトリックス的に表現できない。そもそもマトリックスとテーブルはデータを格納する構造が異なるから。みたいなことを話していました。

気になったので調べてみたところ、何の気なしに使う「行列」という言葉は、マトリックスの日本語訳らしいですね。しかし、テーブルは行と列で構成されているので、これでは
テーブル=行列=マトリックス
となるのではないでしょうか?だとすると、聞いた話が違う、ということになり混乱しています。

もしデータの構造に関して詳しい方がいらっしゃれば、違いを教えていただきたいです。

0

3Answer

「金庫」と「物置」は形さえ同じような入れ物だけど使用目的は異なると思います.
物置に通帳を入れる人も,金庫にねじを入れる人も,多分いないと思います.

抽象化が当たり前の現代プログラミング1において,目的が分かりやすく伝わるというのは何より大切な設計事項となっており,tableとmatrixの違いも使用目的をはっきり伝えるための手段として用いられます.
ふつうmatrixという用語は専ら数学行列を表現し,計算用のメソッドを提供するものを指しますし,tableという用語は(特にユーザーから受け取った)任意のデータを保持するためのものを指します.

具体的にどう実装上違うのかはドキュメントを見ればわかりますし,言語によっても異なるところがあるので割愛しますが,とにかく行列計算用に確保する変数にtableと名付けるのは慣例的でないということです.

細かいところだとMapListはいずれもKey,Valueなデータを格納する手段として用いられますが,パフォーマンスや順序保証などその特徴によって明確に使い分けられることがあります.

  1. 無論アセンブリ言語が扱うような低レベルレイヤーではメモリ上のデータという扱いに集約されてしまうわけですが…

5Like

Comments

  1. @Somei-Yoshino

    Questioner

    ご回答ありがとうございます。
    抽象度というイメージはプログラミング学習を進める上でとても大切だと感じました。
    マトリックスにはアカデミックな要素が強めということでしょうかね。
    今後も学習を継続して、より深く理解できるようにしていきます、ありがとうございます。

n行m列の2次元データを格納する主な方法1として以下の2つがあります。そのエンジニアのイメージするデータ構造の違いはこのことではないでしょうか。

// 3行3列のテーブルのイメージ
// m要素1次元配列へのポインタをn個格納した配列
┌────┬────┬────┐           
│    │    │    │           
└──┬─┴──┬─┴──┬─┘                  
   │    │    ▼             
   │    │  ┌────┬────┬────┐
   │    │  │3,1 │3,2 │3,3 │
   │    ▼  └────┴────┴────┘
   │  ┌────┬────┬────┐     
   │  │2,1 │2,2 │2,3 │     
   ▼  └────┴────┴────┘     
 ┌────┬────┬────┐          
 │1,1 │1,2 │1,3 │          
 └────┴────┴────┘          
// 3行3列の行列のイメージ
// n×m要素の1次元配列
┌────┬────┬────┬────┬────┬────┬────┬────┬────┐
│1,1 │1,2 │1,3 │2,1 │2,2 │2,3 │3,1 │3,2 │3,3 │
└────┴────┴────┴────┴────┴────┴────┴────┴────┘

ただ、一般的にはテーブルと行列(マトリックス)は @Verclene さんが回答されたように抽象的な用途の違いで名付けられます。どちらがどちらのデータ構造を使うという決まりはありません。また多次元配列のメモリレイアウトも言語仕様によって異なります(Java などは前者、 C などは後者)。

  1. 他、配列ではなく連結リストを使う方法などがあります。また行と列のどちらを先に格納するかでも違いがあります。

1Like

Comments

  1. @Somei-Yoshino

    Questioner

    図として表していただき、ありがとうございます。
    とてもイメージしやすいです...!

ご回答ありがとうございます。
言葉としてしっかり理解できたわけではないのですが、「テーブルの列を行として展開する。つまり横に展開していくという点でマトリックス的に表現できない」と理解しました。
最初からそういう構造としてテーブルを作ることは可能だけど、テーブルとして実用的ではないし、テーブルらしいテーブルをマトリックス的構造に整形することにSQL的な難しさがある、という理解です。
間違っている可能性もありますが、ひとまずこの理解で進めてみようと思います

0Like

Your answer might help someone💌