2016-07-27 28 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