私は以下を実行しようとしています
>> from numpy import *
>> x = array([[3,2,3],[4,4,4]])
>> y = set(x)
TypeError: unhashable type: 'numpy.ndarray'
Numpy 配列のすべての要素を含むセットを簡単かつ効率的に作成するにはどうすればよいですか?
ベストアンサー1
要素のセットが必要な場合は、別の、おそらくより速い方法があります。
y = set(x.flatten())
追伸x.flat
: 10x100 配列で、、x.flatten()
およびを比較したところx.ravel()
、すべてがほぼ同じ速度で実行されることがわかりました。3x3 配列の場合、最も高速なバージョンは反復子バージョンです。
y = set(x.flat)
これはメモリ使用量が少ないバージョンなのでお勧めします (配列のサイズに応じて適切に拡張されます)。
お知らせ: 同様のことを実行する NumPy 関数もあります。
y = numpy.unique(x)
これは、 と同じ要素を持つ NumPy 配列を、set(x.flat)
NumPy 配列として生成します。これは非常に高速 (ほぼ 10 倍高速) ですが、 が必要な場合set
、 を実行するとset(numpy.unique(x))
他の手順よりも少し遅くなります (セットの構築には大きなオーバーヘッドが伴います)。