gpt4 book ai didi

矩阵 x[i,j] 和 x[i][j] 两种形式的python区别

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:30 25 4
gpt4 key购买 nike

我想了解 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com