要知道验证两个条件的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。我不明白为什么。
答案 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)
但这不是特别易读。