平等我想測試多個args來平等(即它應該返回True
如果所有ARGS相等並且False
如果至少一個參數不同)。測試的多個參數與numpy的
由於numpy.equal
只能處理兩個參數,我會試圖減少,但很明顯,失敗:
reduce(np.equal, (4, 4, 4)) # return False because...
reduce(np.equal, (True, 4)) # ... is False
平等我想測試多個args來平等(即它應該返回True
如果所有ARGS相等並且False
如果至少一個參數不同)。測試的多個參數與numpy的
由於numpy.equal
只能處理兩個參數,我會試圖減少,但很明顯,失敗:
reduce(np.equal, (4, 4, 4)) # return False because...
reduce(np.equal, (True, 4)) # ... is False
您可以使用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
的numpy_indexed包具有用於此內置函數。請注意,它也適用於多維數組,也就是說,例如,您可以使用它來檢查一堆圖像是否完全相同。
import numpy_indexed as npi
npi.all_equal(array)
如果您的參數是浮點值,則由於四捨五入誤差,相等性測試可能會產生奇怪的結果。在這種情況下,你應該使用更可靠的方法,例如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內置的功能。
我的參數是整數,但我會記住您的答案,有一天它可能會有用! – floflo29
在第二種方法中,您不確定第一個元素是否與其他元素不同。 – Learner
@Learner我們只是想檢查所有項目是否相等。 – Kasramvd