在numpy数组中组合AND逻辑语句
当两个条件True
在矩阵中时,选择元素的方式是什么?在R中,基本上可以组合布尔向量。
所以我的目标是:
A = np.array([2,2,2,2,2])
A < 3 and A > 1 # A < 3 & A > 1 does not work either
相当于:ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()
它应评估为:
array([True,True,True,True,True])
我的解决方法通常是将这些布尔向量求和并等于2,但是必须有更好的方法。它是什么?
-
您可以使用
&
,例如:x = np.arange(10) (x<8) & (x>2)
给
array([False, False, False, True, True, True, True, True, False, False], dtype=bool)
一些细节:
-
之所以有效,
&
是因为它是numpy ufunc的简写bitwise_and
,其bool
类型与相同logical_and
。也就是说,这也可以解释为
bitwise_and(less(x,8), greater(x,2))
-
您需要使用括号,因为numpy
&
中的优先级高于<
和>
and
不起作用,因为它对于numpy数组是模棱两可的,因此numpy引发了异常,而不是猜测。
-