例如,我想创建一个遮罩,遮罩值在40到60之间的元素:
foo = np.asanyarray(range(100))
mask = (foo < 40).__or__(foo > 60)
看起来很难看,我写不出来:
(foo < 40) or (foo > 60)
因为我的结局是:
ValueError Traceback (most recent call last)
...
----> 1 (foo < 40) or (foo > 60)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
有没有一种规范的方法可以对具有好看代码的numpy数组执行元素布尔操作?
您可以使用numpy logical operations。在您的示例中:
如果只在布尔值内进行比较(如示例中所示),则可以使用Jcollado建议的按位或运算符
|
。但请注意,如果您曾经使用过非布尔值,比如mask = (foo < 40) | override
,这会给您带来奇怪的结果。只要override
保证为False、True、1或0,就可以了。更一般的是使用numpy的比较集运算符
np.any
和np.all
。此代码段返回35到45之间小于40或不是3的倍数的所有值:不如
|
好,但比问题中的代码好。你试过这个吗?
注意:对象中的
__or__
方法重载按位或运算符(|
),而不是布尔or
运算符。相关问题 更多 >
编程相关推荐