我正在尝试使用布尔数组进行索引
def boolean_array_indexing_each_dim1():
a = np.array(
[
['a','b','c','d'],
['e','f','g','h'],
['i','j','k','l'],
['m','n','o','p']
]
)
print('a=\n',a.shape,'\n',a)
b1 = np.array([True,True,True,False]) #gives error
#b1 = np.array([True,False,True,False]) #works
print('b1=\n',b1.shape,'\n',b1)
b2 = np.array([True,False,True,False])
print('b2=\n',b2.shape,'\n',b2)
selected = a[b1,b2]
print('selected=\n',selected.shape,'\n',selected)
数组b1 = np.array([True,True,True,False])
导致“ ValueError形状不匹配:对象无法广播为单个形状”
b1 = np.array([True,False,True,False])
但是,该数组有效并产生结果'['a''k']'
为什么会发生此错误?有人可以告诉吗?
原因是您的第一个b1
数组具有3个True
值,第二个数组具有2个True
值。这些分别相当于通过索引[0,1,2], [0,2]
。Numpy的索引通过根据b1
andb2
数组中的位置序列构造索引对来“起作用” 。对于的情况下[0,1,2], [0,2]
它构造指数对(0,0), (1,2)
,但再有就是为最终没有合作伙伴2
的b1
,所以它提出ValueError
。您的替代项b1
有效,因为它恰好具有与相同数量的True
值b2
。
我怀疑你打算完成的是
selected = a[b1,:][:,b2]
这将b1
沿轴0一致地切片该数组,然后b2
沿轴1对其进行切片。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句