Python:从多维数组中删除重复项

时间:2012-12-30 08:44:17

标签: python arrays multidimensional-array numpy duplicates

在Python中numpy.unique可以非常高效地从一维数组中删除所有重复项。

1)如何删除 2D数组中的重复行或列?

2) nD数组怎么样?

3 个答案:

答案 0 :(得分:4)

如果可能,我会使用熊猫。

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)

答案 1 :(得分:1)

以下是另一种比for循环好得多的方法。 2s为10k + 100重复。

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

b = set(tuples(a))

这个想法受到了 Waleed Khan 的第一部分的启发。 因此,不需要任何可能有进一步应用的附加包。 我想这也是超级Pythonic。

答案 2 :(得分: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))