セット (ビットベクトル) の Jaccard 類似度の計算にこの問題があります。
v1 = 10111
v2 = 10011
交点のサイズ = 3; (どうやってそれを見つけることができますか?)
和集合のサイズ = 4 (どうすれば見つけられるでしょうか?)
Jaccard 類似度 = (交差/和) = 3/4
しかし、2 つのベクトルの「交点」と「結合」をどのように見つけたらよいのかわかりません。
私を助けてください。
セット (ビットベクトル) の Jaccard 類似度の計算にこの問題があります。
v1 = 10111
v2 = 10011
交点のサイズ = 3; (どうやってそれを見つけることができますか?)
和集合のサイズ = 4 (どうすれば見つけられるでしょうか?)
Jaccard 類似度 = (交差/和) = 3/4
しかし、2 つのベクトルの「交点」と「結合」をどのように見つけたらよいのかわかりません。
私を助けてください。
おそらく、「交差点」と「ユニオン」の定義は、「両方の値に設定されたビット数」と「いずれかの値に設定されたビット数」です....これは(int
またはlong
のようなものを使用していると仮定しますベクトル) :
int intersection = CountBits(v1 & v2);
int union = CountBits(v1 | v2);
次に、実装する必要がありますCountBits
。このスタック オーバーフローの質問が役に立ちます。
int
またはを使用する代わりに、 を使用long
することもできますBitArray
。これにはメソッドがAnd
あり、元の値を変更していないように見えますが、完全には明らかではありません。もちろん、設定されたビットをカウントする最良の方法を考え出す必要があります-うまくいくかもしれません。Or
BitArray
array.Cast<bool>().Count(bit => bit)