3

Python ではnumpy.unique、1D 配列からすべての重複を非常に効率的に削除できます。

1) 2D 配列で重複する行または列を削除するにはどうすればよいですか?

2) nD 配列の場合はどうですか?

4

3 に答える 3

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)
于 2012-12-30T09:08:25.193 に答える
1

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だと思います。

于 2012-12-30T10:19:20.970 に答える
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))
于 2016-04-02T19:20:08.310 に答える