MATLABには、多次元配列を定義する簡単な方法があります。
A(:,:,1) = [1,2,3; 4,5,6];
A(:,:,2) = [7,8,9; 10,11,12];
>> A
A(:,:,1) =
1 2 3
4 5 6
A(:,:,2) =
7 8 9
10 11 12
ここで、最初の2つのインデックスは、それぞれ、Aに格納されているi番目の行列(またはページ、下の図を参照)の行と列です。
Pythonで同じ構造を定義する方法を知っている人はいますか?
numPyのインデックス付けはMATLABに似ています
import numpy as np
A=np.empty((2,3,3))
A.shape
#(2L, 3L, 3L)
A[0,1,2] # element at index 0,1,2
#0.0
A[0,:,:] # 3x3 slice at index 0
#array([[ 0., 0., 0.],
# [ 0., 0., 0.],
# [ 0., 0., 0.]])
A[1,1,:] # 1-D array of length 3
#array([ 0., 0., 0.]
これを行う純粋なPythonの方法は、リストのリスト(またはこの場合はリストのリストのリスト)を使用することです。リスト内包表記で初期化できます。例えば:
w = 4 #width
h = 3 #height
d = 3 #depth
data = [[[0]*h for _ in range(w)] for _ in range(d)]
または、テンソルを図のようなタプルで埋めたい場合:
data = [[[(i+1,j+1,k+1) for k in range(h)] for j in range(w)] for i in range(d)]
これにより、ゼロで満たされたd
x w
x h
"matrix"が初期化されます。
次に、次のコマンドで(i,j,k)
番目の要素にアクセスできます。
data[i][j][k]
それにもかかわらず、ベクトル、行列、テンソルなどをサポートする numpy のようなライブラリがあります。