Python 2.x True&在特定情况下

时间:2016-06-10 16:51:55

标签: python arrays numpy boolean

我到处寻找答案,对不起,如果这是一个非常基本的问题。我正在使用布尔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

如您所见,此示例正常。任何帮助将不胜感激。

谢谢!

2 个答案:

答案 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]