C# 中向量的 ParallelEnumerable.Sum?

问题描述 投票:0回答:1

C# 中向量是否有相当于 ParallelEnumerable.Sum() 的函数?我目前正在使用 System.Numerics Vector2s,但实际上任何具有多个组件的数据结构都可以正常工作。我正在处理一个非常大的数据集,它将极大地受益于并行求和,但现在我必须多次调用它,而单次调用是最佳的。

作为我想要完成的事情的一个例子 -

GetWeightedValue(IEnumerable<Data> data)
{
    Vector2 sum = data.AsParallel().Select(data =>
    {
        float value = CalculateValue(data);
        float weight = CalculateWeight(data);
        return new Vector2(value * weight, weight);
    }).Sum();

    return sum.X / sum.Y;
}
c# parallel-processing sum ienumerable
1个回答
0
投票

您可以简单地使用 ParallelEnumerable.Aggregate

 包中的 
System.Linq.Parallel
 方法而不是像这样的 
Sum

var data = new List<int> { 1, 2, 3, 4 };
var sum = data.AsParallel()
    .Select(x => new Vector2(x * 2, 1))
    .Aggregate((aggregate, current) => aggregate + current);

// Sum is now a Vector2(20, 4)
© www.soinside.com 2019 - 2024. All rights reserved.