为什么 A[:,i] 不同于 A[:][i]?

Why is A[:,i] different from A[:][i]?

A = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
print(A[:,0])
print(A[:][0])

输出:

array([1, 4, 7])
array([1, 2, 3])

我对第二个输出感到困惑,因为它应该 select : (everything) 来自第一个维度,所以所有行向量。并从第二个维度,即行向量的条目,提取第0列向量。

逗号符号 [:,0] 来自 numpy,意思是 all in 1st dimension0 in 2nd dimension 所以 A[:,0] 给出第一列

另一个不等价,因为[:]复制完整列表,A[:]A相同,然后你取0 in first dimension所以A[:][0]给出第一行

A​​[:] 复制数组。

>>> A[:]
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> (A[:] == A).all()
True
>>> A[:] is A
False

A​​[:][0] 与相同 A[0]

>>> A[0]
array([1, 2, 3])

Indexing

Numpy 在骗你,却在做正确的事。如果所有索引都是整数,那么在 Numpy 中 foo[a,b,c]foo[a][b][c] 相同。为此你要感谢 Numpy,而不是 Python。

在内部,foo[a,b,c]foo[(a,b,c)] 相同,因此您最终调用了 foo.__getitem__((a, b, c))。是 Numpy __getitem__ 实现,而不是下标的某种魔力,给你正确的答案。