用并行c#将一个矩阵乘以一个标量向量
本文关键字:一个 标量 向量 并行 | 更新日期: 2023-09-27 18:02:36
我有两个数组字典,它们乘在一起并存储在string和int[]的字典中。代码工作
public class Program
{
public static void Main(string[] args)
{
int[] a = {1,0,3,4,0};
int[] b = { 3, 0, 9, 10, 0};
int[] c = {2,3,3,5,0};
var ret = new Dictionary<string, int[]>();
ret.Add("Jack", a);
ret.Add("Jane", b);
ret.Add("James", c);
var multipliers = new Dictionary<string, int>();
multipliers.Add("Jack", 2);
multipliers.Add("Jane", 3);
multipliers.Add("James", 5);
var results = new Dictionary<string, int[]>();
foreach (var item in ret)
{
int[] arr= new int[item.Value.Length];
for (int i = 0; i < item.Value.Length; i ++)
{
int d = item.Value[i] * multipliers[item.Key];
arr[i] = d;
}
results.Add(item.Key,arr);
}
}
}
做这件事最有效的方法是什么?是否有一种方法可以并行地做到这一点?
下面的代码片段是并行执行的方法:
var results = new ConcurrentDictionary<string, int[]>();
Parallel.ForEach(ret, pair =>
{
var srcArr = pair.Value;
var arr = new int[srcArr.Length];
var multBy = multipliers[pair.Key];
for (var i = 0; i < srcArr.Length; i++)
{
var d = srcArr[i] * multBy;
arr[i] = d;
}
results[pair.Key] = arr;
});