为什么 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 dimension
和 0 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])
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__
实现,而不是下标的某种魔力,给你正确的答案。
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 dimension
和 0 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])
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__
实现,而不是下标的某种魔力,给你正确的答案。