我是python的新手,并创建了一个执行聚类分析的小函数。 快速破解是我必须多次比较两个阵列,直到它不再变化。为此,我使用了一个while循环,只要它们不相等就循环,但我发现我得到了两个不同的结果来自!=而不是==。 MWE:
import numpy as np
a = np.array([1,1,1])
b = np.array([1,2,1])
print((a != b).all())
print(not (a == b))
答案 0 :(得分:1)
not (a == b)
会引发ValueError
,因为具有多个元素的数组的真值是不明确的。
在numpy中反转布尔数组的方法是使用~
运算符:
>>> a != b
array([False, True, False], dtype=bool)
>>> ~ (a == b)
array([False, True, False], dtype=bool)
>>> (~ (a == b)).all() == (a != b).all()
True
答案 1 :(得分:1)
以下两个表达式相同。当至少有一个不同的元素时,它们返回true。
print((a != b).any())
print(not (a == b).all())
以下两个也给出了相同的结果。当两个数组中相同位置的每个元素都不同时,它们返回true。
print((a != b).all())
print(not (a == b).any())
答案 2 :(得分:0)
要了解更多内容,请查看此代码,您要比较 d 和 c ,但两者都是数组,因此您应该正确比较而不是仅仅运算符!! < / p>
a = np.array([1,1,1])
b = np.array([1,2,1])
c = (a!=b)
type(c)
Out[6]: numpy.ndarray
type(a)
Out[7]: numpy.ndarray
c
Out[8]: array([False, True, False], dtype=bool)
c.all()
Out[9]: False
d = (a==b)
type(d)
Out[11]: numpy.ndarray
d
Out[12]: array([ True, False, True], dtype=bool)
not d
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-13-84cd3b926fb6> in <module>()
----> 1 not d
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
not(d.any())
Out[15]: False
x = d.any()
type(x)
Out[19]: numpy.bool_