我想了解 x[i,j]
和 x[i][j]
之间的区别,其中 x 是一个矩阵
x = np.zeros((N,M))
我在做研究时发现的答案总是关于二维数组,但在我的例子中,我有一个带有两个索引的矩阵来处理 i 和 j,我需要用 for 循环根据索引操作矩阵.
for i in range(1,N+1):
for j in range(1,M+1):
x[i-1][j-1]=random.uniform(5,10)
所以你能帮我理解 x[i,j]
和 x[i][j]
之间的区别吗?站)有j个(用户)
最佳答案
对于二维数组的简单索引,两种形式都有效:
In [28]: x = np.arange(6).reshape(2,3)
In [29]: x
Out[29]:
array([[0, 1, 2],
[3, 4, 5]])
In [30]: x[1,2]
Out[30]: 5
In [31]: x[1][2]
Out[31]: 5
对于 np.matrix
(您可能无论如何都不应该使用它)它们不是:
In [32]: X = np.matrix(x)
In [33]: X
Out[33]:
matrix([[0, 1, 2],
[3, 4, 5]])
In [34]: X[1,2]
Out[34]: 5
In [35]: X[1][2]
...
IndexError: index 2 is out of bounds for axis 0 with size 1
这两种形式在句法上并不相同。 [1][2]
首先用 1 索引,然后用 2 索引结果。这与使用两个参数一次索引不同。
In [36]: x[1]
Out[36]: array([3, 4, 5]) # (3,) shape
In [37]: X[1]
Out[37]: matrix([[3, 4, 5]]) # (1,3) shape
错误的产生是因为 np.matrix
返回了另一个 np.matrix
。因此下一个 [2]
索引将再次索引第一个维度。
x[1]
是 x[1,:]
的缩写,即对第一个维度进行索引,并将其余所有维度切片(或 X[1,...]
以允许 3d 和更高)。所以 x[1][2]
确实是
temp = x[1,:]
temp[2]
或者对于矩阵情况:
temp = X[1,:]
temp[2,:]
也就是说,就是2次索引操作。这是一个 Python 表达式,而不是特定的 numpy
用法。
当我们使用列表或切片进行索引时,这两种形式之间的差异变得更加显着,尤其是在设置值时。
我鼓励初学者使用x[i,j]
形式。不要使用 x[1][2]
除非你真的明白发生了什么。
如果需要,我可以了解如何将索引转换为对 __setitem__
和 __getitem__
的调用。
关于矩阵 x[i,j] 和 x[i][j] 两种形式的python区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52164376/