如何在C#中实现Jaccard相似性

时间:2012-08-24 06:21:46

标签: c# vector similarity

我在计算集合(位向量)的Jaccard相似度时遇到此问题:

v1 = 10111

v2 = 10011

交叉点大小= 3; (我们怎么能找到它?)

联合的大小= 4,(我们怎么能找到它?)

Jaccard相似度=(交集/并集)= 3/4

但我不明白我们怎么能找到两个载体的“交集”和“联合”。

请帮帮我。

1 个答案:

答案 0 :(得分:4)

大概你对“交集”和“联合”的定义是“在两个值中设置的位数”和“在任一值中设置的位数”....这是(假设你使用类似{{ 1}}或int为向量):

long

接下来,您只需要实施int intersection = CountBits(v1 & v2); int union = CountBits(v1 | v2); This Stack Overflow question可以帮助你。

您可能希望使用BitArray,而不是使用CountBitsint。这有longAnd方法,看起来就像它们不会改变原始值一样,但它并不完全清楚。您需要找出计算Or中设置的位的最佳方法 - 只需BitArray即可。