27

機械学習用のデータセットを含む Python クラスのハッシュを計算したいと考えています。ハッシュはキャッシングに使うものなので、md5やを考えていsha1ました。問題は、ほとんどのデータが NumPy 配列に格納されていることです。__hash__()これらはメンバーを提供しません。現在pickle.dumps()、各メンバーに対して実行し、これらの文字列に基づいてハッシュを計算しています。ただし、同じオブジェクトが異なるシリアル化文字列につながる可能性があることを示す次のリンクを見つけました。

Numpy 配列を含む Python クラスのハッシュを計算する最良の方法は何でしょうか?

4

7 に答える 7

3

配列内のデータの形式は何ですか?配列を繰り返し処理し、(再現可能な方法で)文字列に変換してから、更新を介してハッシュにフィードすることはできませんか?

例えば

import hashlib
m = hashlib.md5() # or sha1 etc
for value in array: # array contains the data
    m.update(str(value))

numpy配列は変更可能であるため、提供されないことを忘れないでください__hash__()。したがって、ハッシュを計算した後に配列を変更しないように注意してください(同じではなくなるため)。

于 2009-04-30T10:17:59.403 に答える
3

numpy 配列を入力joblibとして使用する関数をメモ化するためのパッケージがあります。この質問から見つけました。

于 2011-03-28T21:27:04.053 に答える
2

これがジャグでのやり方です(この回答の時点でgit HEAD):

e = some_array_object
M = hashlib.md5()
M.update('np.ndarray')
M.update(pickle.dumps(e.dtype))
M.update(pickle.dumps(e.shape))
try:
    buffer = e.data
    M.update(buffer)
except:
    M.update(e.copy().data)

その理由はe.data、一部の配列 (連続配列) でのみ使用できるためです。同じことa.view(np.uint8)(配列が連続していない場合、非記述型エラーで失敗します)。

于 2011-03-28T19:14:09.130 に答える
1

若干の差で最速のようです:

ハッシュ(イター(a))

a numpy ndarray です。

明らかに安全なハッシュではありませんが、キャッシングなどには適しているはずです。

于 2013-10-18T19:08:40.357 に答える