我对许多物体进行成对比较并估计相似性
Item-1,Item-2,Similarity
11, 16, 0.9
11, 18, 0.5
11, 21, 0.9
12, 19, 0.8
12,22, 0.9
12, 24, 0.3
我希望现在根据阈值创建群集,例如,阈值为0.8,想要创建如下列表:
{11,16, 21}
{12,19,22}
with threshold > 0.8
有没有办法在LINQ中执行此操作?我找到了几种从列表中生成对的方法,但我需要反过来。
答案 0 :(得分:2)
假设您拥有包含属性的此类对的集合,Item1
,Item2
和Similarity
,其中前两个是整数,第二个是双精度。
var threshold = 0.8f;
var sets = pairs.Where(p => p.Similarity > threshold)
.GroupBy(p => p.Item1, p => p.Item2)
.Select(g => new [] { g.Key }.Union(g));
答案 1 :(得分:1)
您可以使用
获取请求的群组 items.Where(i => i.Similarity >= .8).GroupBy(i => i.Item1)
然后列表为group.Key
+ group.Select(i => i.Item2)