「4次元」は配列でどのように機能しますか?


30

抽象:

ですから、私が理解しているように(非常に限られた理解しかありませんが)、私たちは(通常)物理的に作業する3つの次元があります。

1番目は線で表されます。
2番目は正方形で表されます。
3番目は立方体で表されます。

私たちが4番目に到達するまで十分に単純です-私が意味することを知っているなら、3D空間で描くのはちょっと難しいです...それは時間と関係があると言う人もます

質問:

さて、それはあまり意味がありませんが、それはすべて私にとって素晴らしいです。私の質問はこれに関するものではなく、MathSOまたはPhysicsSOで質問することです。私の質問は次のとおりです。コンピューターはこれをアレイでどのように処理しますか?

さまざまなプログラミング言語で4D、5D、6Dなどの配列を作成できることは知っていますが、その仕組みを知りたいと思います。


66
3つのディメンションをキューブとして視覚化できる場合、4つのディメンションを一列のキューブの束として視覚化できます。5次元は、グリッド内の各セルに含まれるグリッドとして視覚化できます...キューブ!など...「第4次元」は、プログラムのセマンティクスのコンテキストでそのように定義しない限り、時間とは関係ありません(それが何であれ)。
FrustratedWithFormsDesigner 14

14
一般に、次元を厳密に物理的な構造と見なさないようにすることで、この概念的なこぶを乗り越えることができます。たとえば、一部の機械学習の問題には、数十万単位の次元があり、各次元はデータセットの特徴です。
スティーブンエバーズ14


6
Steve Eversのコメントに加えて、一般的なデータ型、RGBカラーについて考えてください。これには3つの次元があるため、RGBの「色空間」を考慮することができます。次に、アルファコンポーネントを追加します。4つの次元があります。
ジョシュキャスウェル14

25
コンピュータは幾何学的な寸法の概念を気にしないことに注意してください。これらは人間の利便性のための単なるデバイスです。5x5x5x5配列を割り当てると、コンピューターは625個の要素の配列を割り当てるだけで、それに応じてインデックスを使用して計算を行います。
デビッドチャン14

回答:


77

幸いなことに、プログラムは現実世界の物理的な制約によって制限されません。配列は物理空間に格納されないため、配列の次元数は問題になりません。それらは線形メモリに平坦化されます。たとえば、2つの要素を持つ1次元配列は次のようにレイアウトできます。

(0) (1)

2x2次元配列は次のようになります。

(0,0) (0,1) (1,0) (1,1)

3次元の2x2x2配列は次のとおりです。

(0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1)

うまくいけば、これがどこに向かっているかを見ることができます。4つの次元は次のとおりです。

(0,0,0,0) (0,0,0,1) (0,0,1,0) (0,0,1,1) (0,1,0,0) (0,1,0,1) (0,1,1,0) (0,1,1,1)
(1,0,0,0) (1,0,0,1) (1,0,1,0) (1,0,1,1) (1,1,0,0) (1,1,0,1) (1,1,1,0) (1,1,1,1)

10
コンピュータ配列は人間の理解や視覚化によって制限されませんが、物理的制約によって制限されます。たとえば、長さnのそれぞれがn ^ dを取るd次元の配列、またはより一般的に異なる長さ次元n1×n2×…× nd。
acelent

6
@ColtonAllen:何を言っているのかよく分かりません。寸法定義には、「大まかに言って、オブジェクト上の点を指定するのに必要な座標の数です」とあります。int a[2][2][2];3次元配列となるようにCで宣言された配列。
グレッグヒューギル14

4
「幸いなことに、プログラムは現実世界の物理的な制約によって制限されていません。」だから、すべてのプロセッサが4.5THzであり、誰もメモリ階層を気にしないのではないでしょうか。これは....本当に私がreadedた中で最も面白い答えである
Manu343726

24
@ Manu343726彼は私たちが空間と時間の(理論的に)限られた次元に住んでいるという事実に言及していますが、コンピューターメモリの配列には「ふり」の次元があります。私たちが住んでいる次元の数。トロールしないでください> :(
ブラックホーク14

15
@ Manu343726:コンピューターではなくプログラムを慎重に言いました。それはソフトウェアの素晴らしいところの一つです。
グレッグヒューギル14

49

高い空間的次元で想像する必要はありません。シダの葉と考えてください。 シダの葉

メインのストークは最初の配列で、各ブランチは格納されているアイテムです。ブランチを見ると、これが2番目の次元です。これは、データを表す小さなブランチの同様の構造を持っています。これらには順番に独自の小さなブランチがあり、最も内側または最も高い次元の配列のデータを表す小さな葉に到達するまで続きます。

各レベルを独自の名前で宣言すると、この構築を確認できます。ここでは、コードを最小化するために各レベル変数を再利用しています。

leaf = 2;
tinyBranch = [leaf, leaf, leaf];
middleBranch = [tinyBranch, tinyBranch, tinyBranch];
bigBranch = [middleBranch, middleBranch, middleBranch];
mainBranch = [bigBranch, bigBranch, bigBranch];

1
この視覚化は、ギザギザの配列をより厳密に表さないでしょうか?
マットジョンソン-パイント14

2
@MattJohnsonは正式にはいですが、この例では多次元配列についても説明/視覚化しています。
M.Mimpen

4
+1これはきちんとした視覚化であるだけでなく、多くのアレイ実装の線形説明よりも真実に近いものです。ここでほとんどの人が「配列」という用語を連続したメモリに制限するかどうかにかかわらず、「多次元配列」は多くの言語の文献でそのような配置に使用される用語です。
DeveloperInDevelopment 14

46

次元はあなたが望むものは何でも、4番目の次元は必ずしも時間である必要はありません。3つのディメンションをキューブと考えると、4つのディメンションをキューブの行と考えることができます。5次元、キューブのグリッドなど。

また、ボクセルの3Dコレクションを作成し、4番目の次元を色、密度、またはその他のプロパティにすることもできます。

多次元配列にメモリを割り当てる場合、単純に各次元の積をデータ型に割り当てるだけです。各次元に10個の要素の3D配列または「キューブ」がある場合、1,000個の要素が割り当てられます。4次元で10個の要素を持つ4d配列を作成すると、コンピューターは10,000個だけを割り当てます。5次元までバンプすると、100,000が割り当てられます。

コンピューターは、各次元が何を表すのかについて、いかなる意味も気にしません。要素のリストのどこが単一のポイントであるかを選択するには、メモリアドレスを選択するのは乗算です。


26

患者の腕に装着する一連のセンサーである新しい医療機​​器の研究開発を想像してください。テストのために7人のボランティアが並んでいます。各センサーは、低周波、中周波、高周波の測定値を報告します。これらの測定値は、約100ミリ秒ごとに1分間かかります。

分析とプロットのために、すべてのデータをメモリに保存する方法は?

配列、明らかに。これは次のようになります(一般的な擬似コードを使用):

npatients = 7
nsensors = 4     // number of sensors on an arm
nchannels = 3
nsamples = 60.0 / 0.1
sensordata = Array[ npatients, nsensors, 2, nchannels, nsamples ]

これは5次元の配列であり、トリッキーなもの、神秘的なもの、困惑するものは何もありません。5次元ユークリッド空間と関連付けようとする理由はありません。任意の1つのデータ値を取得するには、次のような式を使用します

x = sensordata[6, 5, 1, 2, 338)

これは、各データ値のレコードがあり、患者ID、センサーIDなどを保持する5つの列、および値を持つ列を持つリレーショナルデータベースのクエリと同じです。1つのデータポイントを取得するには、WHEREで5つの用語を使用します:SELECT value FROM SensorData WHERE(patientid = 6)and(sensorid = 5)and(arm = "left")and(channel = "midfreq")and(sampleindex = 338 )。

5列以上のデータベーステーブルについて神秘的なものは何もありませんか?

(私は1ベースのインデックスを使用していますが、実際には0ベースがはるかに一般的です。)

武器の数をハードコーディングしているため、私は悪い子であることに注意してください。タコでこれらのセンサーを調査するための資金を与えられた場合、私は困っています!


3
+1ディメンションは、必要な任意のデータにできることを示す優れた例です。
マイクはモニカをサポートします14

20

配列は、連続したメモリのブロックにすぎません。メモリアドレス指定は1次元であり、前方または後方に移動できます。したがって、5つの要素を持つ配列がある場合、5つのメモリブロックが予約されます。各次元に5つの要素を持つ2次元配列がある場合、25個のメモリブロックが予約されます。


5
はい、配列に次元を追加する際には、このことに留意してください。メモリ使用量は簡単ではない場合があります。
davidhaskins

18

...またはMathSOで質問します...

実際、数学者は四次元を時間のようなものに関連付けること決してありません(少なくとも通常はそうではありません)。また、最初の3つを空間のようなものと関連付けることもありません。数学者は、通常、ベクトル空間の抽象的なプロパティとして次元を定義するだけです(多くの場合、これは多様体または計量空間に一般化されます)。そして、この抽象的な定義は、私たちが移動する物理空間がいくつの次元を持っているかを気にしません。寸法の概念は、物理的なスペースに似ていないスペースにも適用されます。実際、数学者(そして実際には物理学者)は、しばしば無限次元を使用します。 量子力学のヒルベルト空間などの空間。

それを明確にして、配列について話しましょう。ベクトル空間を理解する必要はありません。実際、ここでは抽象的な定義がはるかに単純であるためです。

0 × 1 × 2 ×...× N -1)-sizedアレイ(すなわち、寸法のNは)単にの集合である01 ⋅...⋅ N -1番号(または、どのタイプのオブジェクトでも配列に入力します)。その長さの1次元配列との唯一の違いは、次元を個別にインデックス付けする特別な便利な方法があることです。

I LIN = I N -1 + N -1 ⋅(I N -2 + N -1 ⋅(... 2 ⋅(I 1 + 1I 0)...))


明確にするために、3つの次元を記述するために3つの要素を持つ配列のみが必要であり、N要素の配列はNの次元を記述します。ただし、すべてのベクトルを詳細に記述することは別の話です。多くの場合、画像を表示することで行われます(imshowPythonで)-2つの空間次元と3番目の色次元を表示できます。
スコット14

@Scott:「配列の次元」という概念は、配列によって表されるベクトルのある空間の次元とは関係のないものを意味するため、残念です。(ただし、そもそも単純な抽象化されていない配列でベクトルを表すのは、あまり良い考えではないと思います。)より良い名前は、テンソルに類似した配列のランクかもしれません。
左辺り14

13

プログラミングでは、配列を実装するのは非常に簡単ですが、理解するのは難しいかもしれません。

一般的に、配列の各レベルは、コンテンツを保持することを意味しますn。つまり

  • int x[4]は4つのブロックで、それぞれにが含まれていintます。
  • int x[5][4]は5つのブロックで、それぞれにが含まれていint[4]ます。
  • int x[3][5][4]は3つのブロックで、それぞれにが含まれていint[5][4]ます。
  • int x[2][3][5][4]は2つのブロックで、それぞれにが含まれていint[3][5][4]ます。

どのようにそれらを参照するかはあなた次第ですが、より良い理解のために、あなたは

  • COLUMN 最後の
  • ROW 二番目に
  • PAGE 最後から3番目の

ここまで、どこかで読んだ。ここにとどまるために、同様に定義することができます

  • BOOK 最後から4番目の
  • そして多分SHELF5番目の1 つのために。(または、必要に応じて、SHELFROW続行できます。)

そうは言っても、「野生生物」では4次元または5次元以上の配列を見たことはありません。

このようにしてint x[6][2][3][5][4]、それぞれが2ページ、それぞれが3ページ、それぞれが5行、それぞれが4列の6つの「棚」のコレクションとして定義および想像できます。


13

チェストのような1次元配列を考えてください。

引き出し

各引き出しは配列のインデックスです。必要なものは何でも各引き出しに入れることができ、多くの目的のために、各引き出しには1つのアイテム(1次元配列)のみが含まれます。

しかし、このチェストは魔法のようなものなので、物理的なスペースに制限されません。あなたが置くことができることを意味することに引き出しの別のチェスト引き出しの最初の胸の各引き出し内部を。引き出しの内側のチェストには、好きなものを入れることができます。それは2次元配列です。

したがって、「最初のチェストの一番上の引き出しを開き、そのチェストから引き出しを取り出して、その2番目のチェストの一番下の引き出しを開く」などと言うことができます。これは、2D配列のインデックスにアクセスするようなものです。myArray[0] [3];

そしてもちろん、最も外側の引き出しの中にある引き出しには、それ自体に引き出しを入れることができます。それは3次元配列です。

したがって、あなたの質問は次のとおりです。4次元配列とは何ですか?もちろん、チェストのチェスト、チェストのチェスト、チェストのチェストです!

引き出しはずっと下にあります。


4
引き出しのchestがずっと下にあります、男。
トーマスエディング14

8
そして最後のチェストに?カメ
ケビンワークマン14

少しつまらないこと。4ではなく、各チェストに3つの引き出しがあり、ベース0インデックスを使用している場合、下の引き出しは3ではなく2 myArray[0][3]になりますmyArray[0][2]。したがって、代わりにになります。しかし、そうでなければ良い説明。
トム・ハード14

@TomHeard最初の引き出しには3つの引き出しがありますが、最初の引き出しの内側には4つの引き出しがあります。ああ!:p
ケビンワークマン14

1
ああ、それは結構です。= D
トム・ハード

5

この質問のほとんどの側面はすでに検討されていますが、ディメンションの性質を検討すると役立つと思います。すべての次元が空間的ではありません。ディメンションは、測定のコンテキストです。ここではいくつかの例を示します。

  • 頻度-色またはピッチ
  • 質量
  • ヴァランス
  • 色(アップクォーク、ダウンクォーク、ストレンジクォーク、チャームクォークなど)
  • スピン方向
  • 角度
  • ラウドネス
  • 辛さ(唐辛子の)

3番目の空間次元があるため、「4番目」の次元は4番目だけです。空間と時間は大きく見えます。非常にあなたの顔。しかし、定量化可能で測定可能な品質は、それを測定すればディメンションになる可能性があります。

たとえば、ブラジャーには3つの次元があります:カップサイズ、胸のサイズ、すき間(女の子の名前はわかりませんが、カップ間の距離を意味します)。


1
「すべての次元が空間的というわけではありません。」配列の場合、すべての次元空間です。
ライモイド14

2
@Rhymoid:配列の場合、空間について考える上で本質的に空間的な次元はありません。:P必要なものを表すように定義します。
cHao 14

@cHaoたぶん、保存するデータのセマンティクスを見ると。しかし、物事の表現/構文/実装の側面では、すべての配列の次元は本質的に空間的です。実際には、アルゴリズムの一部として配列を使用するときに依存するものです。
ライモイド14

@Rhymoid:それは、この質問が最初に尋ねられるようになったのと同じ思考プロセスです。列挙可能なディメンションは空間になりません。実装上、スペースはありません。メモリーのみがあり、プログラムが知っている/見る/気にする限り、メモリーは一次元です。
cHao 14

@cHao:実装上、時間もあるため、スペースがあります。「スペースリーク」という用語(「メモリリーク」の代替として、Haskellコミュニティで見られる)は偶然ではありません。メモリが1次元として記述されているという事実は、BCPLの遺産です。
ライモイド14

4

物理学では、各空間次元が無限であると想定しているため、新しい次元のスペースを見つけるのは非常に困難です。

有限配列を扱う場合、スペースを見つけるのは簡単です。

グリッドが印刷された紙のシートを想像してください。グリッドの各セルに情報を書き込むことができます。これは、行と列の2D配列です。

これらの用紙のいくつかをファイルフォルダーに入れます。これは、ページ、行、列の3D配列です。

これらのフォルダーのいくつかをファイルボックスに入れます。4D配列:フォルダー、ページ、行、列。

木製パレット上の長方形のグリッドにボックスを配置します。6D配列:ボックス行、ボックス列、フォルダー、ページ、行、列。

それらの上にさらにボックスのグリッドを積み重ねます。7D配列:ボックス深度、ボックス行、ボックス列、フォルダー、ページ、行、列。

パレットを出荷用コンテナ(9Dアレイ)に詰め込みます。(各スタックがコンテナの内部と同じ高さであると仮定すると、ここではさらに2次元しか取得できません。)

コンテナ船のデッキに輸送コンテナを積み重ねます:12Dアレイ。

コンテナ船の艦隊は13Dアレイになりました。


「各空間次元が無限であると仮定する」無限は実際にはここで最大の問題ではなく、連続は「実際の」問題です(つまり、数え切れないほど無限であり、物理的に意味のある同相写像が必要です)。
leftaroundabout 14

3

デカルト座標系では、平面上にx軸とy軸があります。平面上の任意の数を(x、y)として表すことができます。

3つの「スペース」(キューブとも呼ばれます)では、x、y、z軸を使用できます。キューブの任意の要素を(x、y、z)として表すことができます。

多変量空間では、x、y、z、およびw軸を使用できます(w軸は「虚数」です)。その空間の任意の要素を(x、y、z、w)として表すことができます。

空間内のこれらの点はすべて、ベクトルで示されます。4空間では、v1 =(x1、y1、z1、w1)、および v2 =(x2、y2、z2、w2)の。次に、これらのベクトルを数字のように操作します。たとえば、2つのベクトルの合計v1 + v2は(x1、y1、z1、w1)+(x2、y2、z2、w2)になります。次に、これらのベクトルを番号ごとに用語ごとに追加して、(x1 + x2、y1 + y2、z1 + z2、w1 + w2)を取得します。

プログラムは適切な配列を使用してベクトルを定義し、適切な順序で算術演算を実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.