如何在 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 中定义多维数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何定义空的多维数组

Python——ndarray多维数组基本操作(1)

Python:创建多维零数组的多维数组

PHP中多维数组的问题

matlab如何创建多维数组

MATLAB中如何定义多维矩阵