5
>>> 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 数组[]

4

1 回答 1

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
于 2013-10-02T20:04:19.020 回答