在Python中numpy.unique
可以非常高效地从一维数组中删除所有重复项。
1)如何删除 2D数组中的重复行或列?
2) nD数组怎么样?
答案 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))