我想测试多个args的相等性(即如果所有args相等则它应返回False
,如果至少一个参数不同则返回numpy.equal
。
由于reduce(np.equal, (4, 4, 4)) # return False because...
reduce(np.equal, (True, 4)) # ... is False
只能处理两个参数,我会尝试减少,但显然会失败:
{{1}}
答案 0 :(得分:2)
您可以使用np.unique
检查数组中唯一项的长度是否为1:
np.unique(array).size == 1
或np.all()
以检查所有商品是否与您的某件商品相同(例如第一件商品):
np.all(array == array[0])
演示:
>>> 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
答案 1 :(得分:1)
numpy_indexed包具有内置函数。请注意,它也适用于多维数组,例如,您可以使用它来检查一堆图像是否完全相同。
import numpy_indexed as npi
npi.all_equal(array)
答案 2 :(得分:1)
如果你的args是浮点值,那么由于舍入错误,相等测试会产生奇怪的结果。在这种情况下,您应该使用更强大的方法,例如numpy.allclose
:
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
注意: Python 3用户需要包含句子from functools import reduce
,因为reduce
不再是Python 3中的内置函数。