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;
}
您可以简单地使用 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)