numpy配列のハッシュ化で最も効率的なプロパティ
2023-09-14 10:29:23
質問
を格納できるようにする必要があります。
numpy
array
の中に
dict
をキャッシュのために使用します。 ハッシュスピードは重要です。
は
array
はインディケータを表します。したがって、オブジェクトの実際のアイデンティティは重要ではありませんが、値は重要です。 現在の値だけに興味があるので、変異性は気になりません。
に格納するために、何をハッシュ化すればよいのでしょうか?
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
は最高のパフォーマンスを提供します。
読み取り専用バッファのハッシュはそれ自体で高速ですが、書き込み可能フラグを設定するオーバーヘッドにより、実際には遅くなります。
どのように解決するのですか?
読み取り専用にすれば、基盤となるバッファを単純にハッシュ化することができます。
>>> a = random.randint(10, 100, 100000)
>>> a.flags.writeable = False
>>> %timeit hash(a.data)
100 loops, best of 3: 2.01 ms per loop
>>> %timeit hash(a.tostring())
100 loops, best of 3: 2.28 ms per loop
非常に大きなアレイの場合
hash(str(a))
は非常に高速ですが、その場合は配列のごく一部しか考慮されません。
>>> %timeit hash(str(a))
10000 loops, best of 3: 55.5 us per loop
>>> str(a)
'[63 30 33 ..., 96 25 60]'
関連
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] NumPyの配列で、N個の最大値のインデックスを得るには?
-
[解決済み] NumPy の配列を csv ファイルにダンプする
-
[解決済み] NumPy多次元配列のi番目の列にアクセスする方法は?
-
[解決済み] Numpy配列の次元
-
[解決済み] 2D float numpy arrayを2D int numpy arrayに変換する方法は?
-
[解決済み】numpyの配列を逆引きする最も効率的な方法
-
[解決済み】numpy:配列内のユニークな値に対する最も効率的な頻度カウント
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] pycharmがタブをスペースに自動変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コレクションのhashCodeメソッドの最適な実装について
-
[解決済み] Python 3.3のハッシュ関数は、セッション間で異なる結果を返す
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Python 言語を決定するには?