Python ではnumpy.unique
、1D 配列からすべての重複を非常に効率的に削除できます。
1) 2D 配列で重複する行または列を削除するにはどうすればよいですか?
2) nD 配列の場合はどうですか?
Python ではnumpy.unique
、1D 配列からすべての重複を非常に効率的に削除できます。
1) 2D 配列で重複する行または列を削除するにはどうすればよいですか?
2) nD 配列の場合はどうですか?
可能であれば、パンダを使用します。
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)
for
以下は、ループよりもはるかに優れたパフォーマンスを発揮する別のアプローチです。10k+100の重複の場合は2秒。
def tuples(A):
try: return tuple(tuples(a) for a in A)
except TypeError: return A
b = set(tuples(a))
WaleedKhanの最初の部分に触発されたアイデア。したがって、追加のアプリケーションが必要になる可能性のある追加のパッケージは必要ありません。それも超Pythonicだと思います。
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))