我想在二维numpy数组上执行切片:
type1_c = type1_c[
(type1_c[:,10]==2) or
(type1_c[:,10]==3) or
(type1_c[:,10]==4) or
(type1_c[:,10]==5) or
(type1_c[:,10]==6)
]
语法看起来正确;但是我收到以下错误消息:
‘具有多个元素的数组的真值是不明确的.使用a.any()或a.all()’
我真的不明白出了什么问题.任何的想法?
解决方法:
或者在两个标量之间是明确的,但是什么是正确的向量推广?如果x == array([0,0])和y == array([0,1]),则x或y应为(1)False,因为并非所有成对项或-ed一起为True,(2)是的,因为至少有一个成对或结果为真,(3)数组([0,1]),因为这是or,(4)数组([0,0])的成对结果,因为[0,0 ]或[0,1]将返回[0,0]因为非空列表是真实的,所以数组应该是什么?
你可以使用|在这里,并将其视为一个按位问题:
>>> import numpy as np
>>> vec = np.arange(10)
>>> vec[(vec == 2) | (vec == 7)]
array([2, 7])
明确使用numpys矢量化逻辑或:
>>> np.logical_or(vec==3, vec==5)
array([False, False, False, True, False, True, False, False, False, False], dtype=bool)
>>> vec[np.logical_or(vec==3, vec==5)]
array([3, 5])
或使用in1d,这在这里效率更高:
>>> np.in1d(vec, [2, 7])
array([False, False, True, False, False, False, False, True, False, False], dtype=bool)
>>> vec[np.in1d(vec, [2, 7])]
array([2, 7])
标签:python,arrays,slice