2012-12-30 142 views
3

在Python中numpy.unique可以非常有效地從1D數組中刪除所有重複項。Python:從多維數組中刪除重複項

1)如何刪除二維數組中的重複行或列

2)nD陣列怎麼樣?

+0

你能舉例說明你正在試圖用一個簡單的例子來實現嗎? – root

+0

@root我們可以使用一種方法從點雲中刪除重複的點(2D或3D)。 – Developer

回答

3

如果可能,我會使用熊貓。

In [1]: from pandas import * 

In [2]: import numpy as np 

In [3]: a = np.array([[1, 1], [2, 3], [1, 1], [5, 4], [2, 3]]) 

In [4]: DataFrame(a).drop_duplicates().values 
Out[4]: 
array([[1, 1], 
     [2, 3], 
     [5, 4]], dtype=int64) 
+0

'pandas'尚未安裝。你能給一些基準嗎?順便說一句,輸入'數組'是'浮動'不是整數。嘗試超過10k點。 – Developer

+2

現在安裝了'pandas',它的表現非常出色:30k點(3D),重複10k共40k,只有0.2s。哇! – Developer

1

以下是另一種比for循環執行得更好的方法。 2個10k + 100個副本。

def tuples(A): 
    try: return tuple(tuples(a) for a in A) 
    except TypeError: return A 

b = set(tuples(a)) 

通過瓦利德汗的第一部分靈感的想法。 因此不需要任何額外的包可能有進一步的應用程序。 這也是超嗜熱菌,我想。

0

numpy_indexed包爲n維情況解決了這個問題。 (免責聲明:我是其作者)。事實上,解決這個問題是啓動這個包的動機;但它已經發展到包括許多相關的功能。

import numpy_indexed as npi 
a = np.random.randint(0, 2, (3, 3, 3)) 
print(npi.unique(a)) 
print(npi.unique(a, axis=1)) 
print(npi.unique(a, axis=2))