簡単で迅速な方法は、ベクトル レベルの数値演算を使用することです。
a = {0, 1, 0, 1, 2};
b = {2, 1, 3, 1, 2};
a - b
{-2, 0, -3, 0, 0}
Unitize[a - b]
{1, 0, 1, 0, 0}
Tr @ Unitize[a - b]
2
HammingDistance
これは、次の使用法と同等です。
HammingDistance[a, b]
2
Tr
パックされた配列では非常に高速であるため、私は合計を使用します。HammingDistance
2 つの長いリストを使用したバージョン 7 との速度比較:
a = RandomInteger[3, 500000];
b = RandomInteger[3, 500000];
Do[HammingDistance[a, b], {50}] // Timing // First
Do[Tr @ Unitize[a - b], {50}] // Timing // First
0.968
0.171
a
とがパックされた配列でない場合、パフォーマンスはより似b
ていますが、それでも数値メソッドが優先されます。Length[a]
Vitaliy が示したように、戻り値を差し引いてターゲット メトリックを取得できます。