在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
其中前两个索引分别为存储在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
"矩阵".
然后,您可以使用以下命令访问(i,j,k)
-th元素:
data[i][j][k]
然而,像numpy这样的库可以支持向量,矩阵,张量等.