python3 陣列重複數字 確定陣列中的重複值

2021-10-12 12:09:53 字數 897 閱讀 6666

假設我有乙個陣列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,否則返回...