最近ディーブラーニングのスキル構築のため、PythonでNumpyを使い行列の内積を求めたりするのですが、多次元配列でイメージができないことがあったので、整理を含めC言語との比較をしていきたいと思います。
ポイント
PythonでもC言語でも、コードで記載するときには、下記の共通の考え方があります。
・一番後ろが1次元になるという考え方
→例えば、PythonのNumpy配列をshapeで表示したときに(3, 4)と表示されたとします。この時の1次元の数は4つあるということです。(2次元の数は3つ)
C言語では、int array[3][4]と定義した時と同じことになります。
・1次元の数は、一番小さいかっこに入っているカンマで区切られている数値の数
→例えば、PythonのNumpy配列をnp.array([ [1, 2,3,4], [5,6,7,8] ])と記述して、多次元配列を生成したとします。この時、1次元の数は4つということが分かります。
C言語では、int array[2][4] = { {1, 2, 3, 4}, {5, 6, 7, 8} };
と定義した時と同じになります。
それでは、それぞれ見ていきましょう。
PythonのNumpyでの多次元
import numpy as np
np.array([ [1, 2], [3, 4], [5, 6] ])
C言語の多次元配列
int array[3][2] = { {1, 2}, {3, 4}, {5, 6} };
イメージ
PythonとC言語それぞれで定義した多次元配列の次元数と中身の数字は同じものになります。
それをイメージで表示すると下記のような図になります。
こうやって図にすると行列の計算のイメージが簡単にできます。
3次元配列
続いて、3次元の配列の定義とイメージを記載します。
下記は、1次元の数が3つ、2次元の数が2つ、3次元の数は3つです。
Pythonのコードです。
np.array( [ [ [1, 2], [3, 4], [5, 6] ],
[ [7, 8], [9, 10], [11, 12] ] ] )
続いて、C言語のコードです。
int array[2][3][2] = { { {1, 2,}, {3, 4}, {5, 6} },
{ {7, 8,}, {9, 10}, {11, 12} } };
まとめ
このようにポイントを理解しておけば、4次元・5次元などの多次元配列がきても理解できます。
出てきた時はこのイメージで切り抜けましょう。