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

标签 python numpy matrix

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

相关文章:

python - Pandas 过滤具有特定年份的数据框行

python - Flask-security 无法与具有多个工作人员的 Gunicorn 一起使用吗?

python - Pandas 数据框转置原始行和列值

r - 如何通过R中的名称将向量转换为矩阵?

r - 在计算 P^n 时,matrixpower() 和 markov() 有什么区别?

java - Python 编程 - 在 Python 中开发企业级软件的规则/建议?

python - Scipy/Numpy/scikits - 基于两个数组计算精度/召回分数

python - 在 python 中使用 unique 函数时保持顺序

python - 在循环中使用 numpy load 时内存溢出

matlab - 提取大矩阵的一部分并使用循环函数将它们分配到新变量中