Numpy数组不能在单个[]内索引

时间:2013-10-02 19:48:06

标签: python numpy indexing

>>> allData.shape
Out[72]: (8L, 161L)
>>> mask = allData[2,:]
>>> allData[[0,1,3],:][:,mask == 1]  # works fine
>>> allData[[0,1,3],mask == 1]  # error: ValueError: shape mismatch: objects cannot be broadcast to a single shape

为什么numpy数组无法在单个括号[]中编入索引?

1 个答案:

答案 0 :(得分:5)

allData[[0,1,3],mask == 1]更改为allData[[0,1,3],argwhere(mask == 1)]应该可以解决问题。

简要说明,如果按[[list1], [list2]]对数组进行切片,则两个列表都应该是索引列表。如果其中一个被:替换以获取该轴中的所有元素,则另一个列表可以是相同大小的布尔数组。其中只有一个需要由:代替。请考虑以下3D数组示例:

b=random.random((5, 10,2))
b[[0,1,3],:, some_mask==1] #works
b[:,:, some_mask==1] #works
b[[0,1,3],[2,4], some_mask==1] #ValueError