我到处都在搜索有关此问题的答案,如果这是一个非常基本的问题,抱歉。我正在使用布尔Numpy数组过滤Numpy数组,该布尔Numpy数组是通过比较3个不同数组中相同索引处的值而创建的。对于所有索引i,我的比较由2个独立的布尔语句组成,即x [i] == y [i]和x [i]!= z [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
如您所见,此示例运行良好。任何帮助,将不胜感激。
谢谢!
我想念什么?
您缺少括号:
(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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句