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

时间:2016-07-27 09:26:52

标签: python numpy

我想测试多个args的相等性(即如果所有args相等则它应返回False,如果至少一个参数不同则返回numpy.equal

由于reduce(np.equal, (4, 4, 4)) # return False because... reduce(np.equal, (True, 4)) # ... is False 只能处理两个参数,我会尝试减少,但显然会失败:

{{1}}

3 个答案:

答案 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中的内置函数。