我想檢查一個陣列中是否有相同的值。一個例子如下。
array1 = np.array([1,1,1,1,1]) would return True
array2 = np.array([1,0,1,0,1]) would return False
我知道如何檢查陣列中的所有值是否都等于某個值。但是我想檢查陣列中的所有值是否彼此相等,無論值是什么。有沒有辦法在不創建函式的情況下只用 Numpy 來做到這一點?
uj5u.com熱心網友回復:
您可以使用 python 集。如果集合的長度為 1,則所有值都相同:
>>> len(set(array1)) == 1
True
>>> len(set(array2)) == 1
False
uj5u.com熱心網友回復:
這也有效,并且似乎比其他一些方法略快:
>>> array1 = np.array([1,1,1,1,1])
>>> array2 = np.array([1,0,1,0,1])
>>> (array1 == array1[0]).all()
True
>>> (array2 == array2[0]).all()
False
與其他解決方案相比,10k 陣列的一些非常粗略的時序圖:
- 這種方法:1.07 毫秒
np.isin(): 1.23 毫秒set(): 2.63 毫秒
uj5u.com熱心網友回復:
這可以使用- np.unique
import numpy as np
array1 = np.array([1,1,1,1,1])
#following passes assertion test
assert(len(np.unique(array1, return_counts=True)[0])==1)
#without getting counts of unique values
#assert(len(np.unique(array1))==1)
array2 = np.array([1,0,1,0,1])
#following will throw an assertion error
assert(len(np.unique(array2, return_counts=True)[0])==1)
uj5u.com熱心網友回復:
我的嘗試是將所有專案與第一個專案進行比較,然后檢查結果是否包含False:
import numpy as np
array1 = np.array([1,1,1,1,1])
print(not np.isin(False, array1 == array1[0]))
在我的機器上,這比len(set())陣列中大約 700 個數字的版本快。在 10000 個專案時,它的速度提高了 5.5 倍。但它比np.unique()版本慢。
在 Core i7-10750H 上測量,10000 次迭代
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/335486.html
