キャッシュ目的でdict
にnumpy
array
を格納する必要があります。ハッシュ速度は重要です。numpy配列のハッシュ処理に最も効率的なプロパティ
array
は指標を表しているため、オブジェクトの実際の身元は重要ではありませんが、値はです。私が現在の価値にのみ関心を持っているので、Mutabliityは関心事ではありません。
dict
に保存するにはどうすればよいですか?
私の現在のアプローチはstr(arr.data)
です。これは私のテストではmd5
より速いです。
私は相対時間のアイデアを得るための回答からいくつかの例を取り入れてきました:
In [121]: %timeit hash(str(y))
10000 loops, best of 3: 68.7 us per loop
In [122]: %timeit hash(y.tostring())
1000000 loops, best of 3: 383 ns per loop
In [123]: %timeit hash(str(y.data))
1000000 loops, best of 3: 543 ns per loop
In [124]: %timeit y.flags.writeable = False ; hash(y.data)
1000000 loops, best of 3: 1.15 us per loop
In [125]: %timeit hash((b*y).sum())
100000 loops, best of 3: 8.12 us per loop
arr.tostring
を提供しています、この特定のユースケース(なインデックスの小さな配列)のためにそれを表示されます最高のパフォーマンス。
読み取り専用バッファをハッシュするのは高速ですが、書き込み可能フラグを設定するオーバーヘッドは実際には遅くなります。
'arr.tostring()'は同じことを行い、より美的に魅力的です。あなたが本当に大きな配列を持っているなら、配列の小さな部分だけをストリング化することができます。 – root
「tostring」は、小さな配列では(配列が10000個の場合は4倍遅くなりますが)よりも速くなります。 –
... 'str'は配列の先頭と末尾のみをフォーマットするので、実際にはかなり明らかです。 –