在numpy数组中使用“or”来表示多个条件

34

所以我有以下条件:

A = 0到10或者40到60

B = 20到50

而我有这段代码:

area1 = N.where((A>0) & (A<10)),1,0)
area2 = N.where((B>20) & (B<50)),1,0)

我的问题是:如何在numpy中执行“OR”条件?

2个回答

50
如果numpy针对布尔运算符&重载了and,那么你可以安全地认为|是布尔运算符or。
area1 = N.where(((A>0) & (A<10)) | ((A>40) & (A<60))),1,0)

1
我认为 & 是按位与运算符...但在这种情况下无关紧要,因为 (A>0) 是一个由 True/False(即 10)组成的数组。 - mgilson
2
一个需要注意的地方是不要忘记将不等式放在括号中,因为它们的运算优先级较低。 - Roman Shapovalov

32

这里有 numpy.logical_or

http://docs.scipy.org/doc/numpy/reference/generated/numpy.logical_or.html

logical_andlogical_or 是你想要的ufuncs(我认为)

请注意,& 不是 logical and,它是位运算符and。这在这种情况下仍然适用,因为(a>10)返回一个逻辑数组(例如1和0),你的第二个条件也一样。所以,在这种情况下,“逻辑 and”和“位 and”是等效的(逻辑和位运算或也是如此)。但在其他情况下,位运算可能会产生出人意料的结果(主要是因为Python的&|运算符在这些上下文中具有比预期更低的优先级)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接