ndarray的“相同”部分的不同形状

时间:2017-11-25 12:53:28

标签: python numpy

我正在考虑一个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]相同。

1 个答案:

答案 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])