2016-07-27 37 views
2

平等我想测试多个args来平等(即它应该返回True如果所有ARGS相等并且False如果至少一个参数不同)。测试的多个参数与numpy的

由于numpy.equal只能处理两个参数,我会试图减少,但很明显,失败:

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

回答

2

您可以使用np.unique来检查,如果你的阵列内的唯一项目长度为1:

np.unique(array).size == 1 
,以检查是否所有的项目都是平等的与你的项目之一(例如第一个)

或者

演示:

>>> 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 
+0

在第二种方法中,您不确定第一个元素是否与其他元素不同。 – Learner

+0

@Learner我们只是想检查所有项目是否相等。 – Kasramvd

1

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

import numpy_indexed as npi 
npi.all_equal(array) 
1

如果您的参数是浮点值,则由于四舍五入误差,相等性测试可能会产生奇怪的结果。在这种情况下,你应该使用更可靠的方法,例如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内置的功能。

+0

我的参数是整数,但我会记住您的答案,有一天它可能会有用! – floflo29