29

所以我有这些条件:

A = 0 到 1040 到 60

B = 20 到 50

我有这个代码:

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

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

4

2 回答 2

46

&如果boolean 的numpy 重载,and您可以放心地假设它|是 boolean or

area1 = N.where(((A>0) & (A<10)) | ((A>40) & (A<60))),1,0)
于 2012-04-30T00:11:00.827 回答
31

numpy.logical_or

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

numpylogical_and并且logical_or是你想要的 ufunc(我认为)

注意&不是logical and,它是按位 and的。这仍然适用于您,因为 (a>10) 与您的第二个条件一样返回一个逻辑数组(例如 1 和 0)。因此,在这种情况下,“逻辑与”和“按位与”是等价的(与逻辑和位相同or)。但在其他情况下,按位运算可能会产生令人惊讶的结果(主要是因为在这些上下文中,python&|运算符的优先级低于预期)。

于 2012-04-30T00:13:22.990 回答