我正在考虑一个numpy数组:
import numpy as np
b = np.empty((10,11,12))
现在我希望以下形状相同,但它们显然不是:
>>> b[0,:,1].shape
>>> (11,)
和
>>> b[0][:][1].shape
>>> (12,)
有人可以向我解释为什么形状不同吗?我阅读了有关索引的Numpy文档,但是它说写a[k][l]
与a[k,l]
相同。
答案 0 :(得分:4)
这是因为b[0][:]
是b[0]
的视图,因此b[0][:][1]
确实是b[0, 1, :]
。数字示例可能有助于突出显示正在发生的事情:
In [5]: b = np.arange(3*4*5).reshape((3, 4, 5))
In [6]: b[0]
Out[6]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [7]: b[0, :]
Out[7]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [8]: b[0, :, 1]
Out[8]: array([ 1, 6, 11, 16])
In [10]: b[0][:]
Out[10]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [11]: b[0][:][1]
Out[11]: array([5, 6, 7, 8, 9])
In [13]: b[0, 1, :]
Out[13]: array([5, 6, 7, 8, 9])
In [32]: b[0][:, 1]
Out[32]: array([ 1, 6, 11, 16])