Python 用Numpy测试多个参数的相等性

Python 用Numpy测试多个参数的相等性,python,numpy,Python,Numpy,我想测试多个参数的相等性(即,如果所有参数相等,则返回True;如果至少有一个参数不同,则返回False) 由于numpy.equal只能处理两个参数,我本来会尝试reduce,但显然失败了: reduce(np.equal, (4, 4, 4)) # return False because... reduce(np.equal, (True, 4)) # ... is False 您可以使用np.unique检查数组中唯一项的长度是否为1: np.unique(array).size ==

我想测试多个参数的相等性(即,如果所有参数相等,则返回
True
;如果至少有一个参数不同,则返回
False

由于
numpy.equal
只能处理两个参数,我本来会尝试reduce,但显然失败了:

reduce(np.equal, (4, 4, 4)) # return False because...
reduce(np.equal, (True, 4)) # ... is False

您可以使用
np.unique
检查数组中唯一项的长度是否为1:

np.unique(array).size == 1
np.all()

演示:

这个包有一个内置的函数。请注意,它也适用于多维数组,例如,您可以使用它检查一堆图像是否完全相同

import numpy_indexed as npi
npi.all_equal(array)

如果参数是浮点值,由于舍入错误,相等性测试可能会产生奇怪的结果。在这种情况下,您应该使用更稳健的方法,例如:


注意:Python3用户将需要包括functools import reduce中的
语句,因为
reduce
不再是Python3中的内置函数。

在第二种方法中,您不确定第一个元素是否与其他元素不同。@学习者我们只想检查所有项目是否相等。我的参数是整数,但我会记住您的答案,有一天它可能会有用!
>>> a = np.array([1, 1, 1, 1])
>>> b = np.array([1, 1, 1, 2])

>>> np.unique(a).size == 1
True
>>> np.unique(b).size == 1
False
>>> np.all(a==a[0])
True
>>> np.all(b==b[0])
False
import numpy_indexed as npi
npi.all_equal(array)
In [636]: x = [2./3., .2/.3]

In [637]: x
Out[637]: [0.6666666666666666, 0.6666666666666667]

In [638]: xarr = np.array(x)

In [639]: np.unique(xarr).size == 1
Out[639]: False

In [640]: np.all(xarr == xarr[0])
Out[640]: False

In [641]: reduce(np.allclose, x)
Out[641]: True