假設我有乙個陣列a = np.array([1, 2, 1, 3, 3, 3, 0])
我如何(有效地,pythonical地)找到a的哪些元素是重複的(即,非唯一值)?在這種情況下,如果有效的話,結果將是array([1, 3, 3]),或者可能是array([1, 3])。
我想出了一些似乎有效的方法:
掩蔽m = np.zeros_like(a, dtype=bool)
m[np.unique(a, return_index=true)[1]] = true
a[~m]
設定操作a[~np.in1d(np.arange(len(a)), np.unique(a, return_index=true)[1], assume_unique=true)]
這個很可愛,但可能是非法的(因為a實際上不是唯一的):np.setxor1d(a, np.unique(a), assume_unique=true)
直方圖u, i = np.unique(a, return_inverse=true)
u[np.bincount(i) > 1]
排序s = np.sort(a, axis=none)
s[:-1][s[1:] == s[:-1]]
熊貓s = pd.series(a)
s[s.duplicated()]
我錯過了什麼嗎?我並不一定要尋找乙個只有numpy的解決方案,但它必須與numpy資料型別一起工作,並在中型資料集(高達1000萬大小)上保持高效。
結論使用1000萬大小的資料集(在2.8ghz xeon上)進行測試:a = np.random.randint(10**7, size=10**7)
360s時減法
我將使用排序來表現,但我接受史蒂文的回答,因為表現是可以接受的,而且感覺更清晰、更像python。
3 陣列中的重複數字
class solution1 return res 例如給定的例子,陣列第0個數字為2,下標與自身不匹配,我們將其與下標為2的數字進行交換,交換後得到 此時第0個數字為1,依舊與下標不匹配,我們將其與下標為1的數字進行交換,得到陣列 仍舊不匹配,繼續交換 此時我們發現,從0 3的數字都與自身下標相...
Python尋找陣列中重複數字
題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。解題思路 第一種解題思路 最簡單的,暴力破解 整個陣列從第...
陣列中重複數字
題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。返回描述 如果陣列中有重複的數字,函式返回true,否則返回...