3

I am new to python and created a small function that does a cluster analysis. The quick rundown is I have to compare two arrays a multitude of times, until it no longer changes. For that I have used a while loop, that loops as long as they are not equal, but I find that I get two different results from != and not ==. 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))
4

3 回答 3

1

not (a == b)将引发 aValueError因为具有多个元素的数组的真值是不明确的。

在 numpy 中反转布尔数组的方法是使用~运算符:

>>> a != b
array([False,  True, False], dtype=bool)
>>> ~ (a == b)
array([False,  True, False], dtype=bool)
>>> (~ (a == b)).all() == (a != b).all()
True
于 2016-01-01T20:57:53.590 回答
1

以下两个表达式是相等的。当至少有一个不同的元素时,它们返回 true。

print((a != b).any())
print(not (a == b).all())

以下两个也给出了相同的结果。当两个数组中相同位置的每个元素都不同时,它们返回 true。

print((a != b).all())
print(not (a == b).any())
于 2016-01-01T20:59:52.483 回答
0

要了解更多信息,请查看此代码,您想比较dc但两者都是数组,因此您应该正确比较,而不是仅通过非运算符!

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_
于 2016-01-01T21:11:17.823 回答