如何在 python 中定义多维数组?
Posted
技术标签:
【中文标题】如何在 python 中定义多维数组?【英文标题】:How can I define multidimensional arrays in python? 【发布时间】:2017-06-04 02:58:55 【问题描述】:在 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。这就像 Python 中的 Matlab。 【参考方案1】:纯 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 这样的库支持向量、矩阵、张量等。
【讨论】:
好的,谢谢您的回答!然后我想我想做的是一个数组列表,比如 A = [array([[1,2,3],[4,5,6]]), array([[5,6, 7], [7,8,9]])] 但是,有没有办法只调用A中第一个数组的每一行的第一个元素?在 matlab 中的东西是 A(:,1,1)。谢谢! @S88S:据我所知没有。在这种情况下,您最好使用 numpy:numpy 确实是用于进行矩阵、...计算,而 Python 本身当然是一种通用编程语言。【参考方案2】:如果您愿意使用NumPy,那么可以使用plenty of ways。一种方法是使用全零进行初始化,或者在您更新的示例中,您也可以填充一个范围,然后填充reshape
。
import numpy as np
a = np.arange(48, dtype=np.int64).reshape((3, 4, 4))
# or
b = np.zeros((3, 4, 4), dtype=np.int64)
【讨论】:
【参考方案3】:使用 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.]
【讨论】:
也许您还应该显示import
语句,因为您使用了np
,它使您的答案“更加固定”。 +1。
另请注意,在 MATLAB 中,在进行数学运算时,通常索引 A(x,y,z)
而 python 遵循 A[z,y,x]
是的,括号和方括号的区别,但索引样式相同,matlab
也使用基于 1 的索引,如 R
,而不是 python
的基于 0 的索引。
这看起来更像!谢谢!以上是关于如何在 python 中定义多维数组?的主要内容,如果未能解决你的问题,请参考以下文章