逻辑OR不使用numpy.logical_or

时间:2015-03-06 14:19:47

标签: python arrays numpy logical-operators

要知道验证两个条件的numpy数组的元素,可以使用运算符*

>>> a = np.array([[1,10,2],[2,-6,8]])
>>> a
array([[ 1, 10,  7],
       [ 2, -6,  8]])
>>> (a <= 6) * (a%2 == 0) # elements that are even AND inferior or equal to 6
array([[False, False, False],
       [ True,  True, False]], dtype=bool)

但OR怎么样?我试着这样做:

>>> (a%2 == 0) + (a <= 6) - (a%2 == 0) * (a <= 6)
array([[ True,  True, False],
       [False, False,  True]], dtype=bool)

但是对于验证这两个条件的元素,结果为false。我不明白为什么。

2 个答案:

答案 0 :(得分:3)

你不需要减法。 关键是+已经表现得像or运算符

>>(a%2==0)+(a<=6)
array([[ True,  True,  True],
       [ True,  True,  True]], dtype=bool)

因为&#34; True+True=True&#34;。

当你减去(a<=6)*(a%2==0)时,你将满足这两个条件的所有元素都变成false

当你做的时候最简单

>>(a<=6)|(a%2==0)
array([[ True,  True,  True],
       [ True,  True,  True]], dtype=bool)

答案 1 :(得分:2)

@ plonser的回答是正确答案:使用+

如果您想再次使用乘法,您可能会记得De Morgan的一条法则告诉您

A or B

在逻辑上等同于

not ( not A and not B )

所以在NumPy中你可以写:

>>> ~(~(a%2 == 0) * ~(a <= 6))
array([[ True,  True,  True],
       [ True,  True,  True]], dtype=bool)

但这不是特别易读。