私はPythonとScalaの両方でMurmurHash文字列を使う必要があります。しかし、彼らは非常に異なる結果を与えています。 Scalaの組み込みのMurmurHash3
ライブラリは、私がオンラインのものを含めて試した他のライブラリと同じ結果を出すようには見えません。奇妙なことは、1文字にはマッチしているようですが、複数の文字にはマッチしていないようです。ここではいくつかの例は以下のとおりです。Scala MurmurHash3ライブラリがPython mmh3ライブラリと一致しません
のPython:
mmh3.hash('string', 0)
res: -1390314837
スカラ:
MurmurHash3.stringHash("string", 0)
res: 379569354
私はJavaが署名している知っているとCの実装のpythonがラッピングされているように私は、符号付きと符号なし整数型で遊んで試してみました署名なしを使用します。しかし、NumPyを使って符号付き整数に変換しても、私たちは助けにはならない。このウェブサイトはPython実装と一致しているようだ:
http://murmurhash.shorelabs.com/
ここで起こって何ができるか上の任意のアイデアを?
これが問題だった場合、Pythonの 'string'をutf-16に変換しないと、Scalaと同じ結果が返されますか? Pythonが: 'string'.encode( 'UTF-16')' – patrickbarker
@patrickbarker - Pythonが他のデータをパックしていない場合にのみ、それらを組み合わせるときにMSB順に文字(short)をパックします。 Scalaの実装はそうです。 –