我到处寻找答案,对不起,如果这是一个非常基本的问题。我正在使用布尔Numpy数组过滤Numpy数组,该数组是通过比较3个不同数组中相同索引的值而创建的。我的比较由2个独立的布尔语句组成,比如x [i] == y [i]& x [i]!= z [i],对于所有指数i。这是令人不安的结果:
x[8]=25
y[8]=27
z[8]=13
x[8]==y[8]
False
x[8]!=z[8]
True
x[8]==y[8] & x[8]!=z[8]
True
正如你所看到的,上面的False& True返回True。我错过了什么?作为我沮丧的另一个例子,这是来自相同数组的另一个例子,它返回了正确的结果:
x[3]=24
y[3]=18
z[3]=27
x[3]==y[3]
False
x[3]!=z[3]
True
x[3]==y[3] & x[3]!=z[3]
False
如您所见,此示例正常。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:2)
我错过了什么?
您错过了括号:
(x[8]==y[8]) & (x[8]!=z[8])
此外,您应该将此作为整个数组的向量化操作,而不是通过循环索引。希望您在实际代码中执行此操作,并且您只是使用了特定的索引来使示例更简单:
(x == y) & (x != z) # Evaluates to an array of booleans.
&
是按位AND运算符,而不是逻辑AND,但由于逻辑and
无法为广播过载(有充分理由),NumPy使用&
布尔数组上的逻辑AND。 &
具有与and
不同的优先级,因此您需要为and
括号内的某些操作加上括号。
答案 1 :(得分:-1)
do(x [8] == y [8])& (X [8]!= Z [8]) 甚至更好 x [8] == y [8]和x [8]!= z [8]