gpt4 book ai didi

c# - C# 中的快速列表乘法

转载 作者:行者123 更新时间:2023-11-30 21:20:28 27 4
gpt4 key购买 nike

一些背景,我正在尝试进行大规模的建筑模拟。

问题是我有一个自定义类型的列表 Point3D我想对其进行快速数组乘法。因此,在不同的时间步长,我必须对 double 进行计时值与 Point3D (我已经为每个 Point3D 重载了 Point3D 的乘法和除法运算) ,结果将存储在 Dictionary<double,List<Point3D>> 中.该字典的key是不同的时间步长,value是对应的位移。

由于我的DOF很多,time step也很多,所以上面的操作好像很慢。无论如何优化整个操作?

这是我当前的代码,速度非常慢。所以我需要一些想法来优化它。

public static Dictionary<double, List<Point3D>> ComputeTimeSeries(Dictionary<double, double> timeStep, List<Point3D> dofs)
{
var timeSeries = new Dictionary<double, List<Point3D>>();
foreach(var keyValue in timeStep)
{
// the point3d*double operation is already being overloaded.
timeSeries.Add(keyValue.Key, dofs.Select(pt=>pt*keyValue.Value).ToList());
}
return timeSeries;
}

注意:我目前仍停留在 .Net 3.5。所以 PLINQ 和 TPL 可能无济于事

最佳答案

我会尝试这样的事情:

public static Dictionary<double, Point3D[]> ComputeTimeSeries(Dictionary<double,    double> timeStep, Point3D[] dofs)
{
var timeSeries = new Dictionary<double, Point3D[]>();
foreach(var keyValue in timeStep)
{
var tempArray = new Point3D[dofs.Length];
for (int index=0; index < dofs.Length; index++)
tempArray[index] = dofs[index] * keyValue.Value;
timeSeries.Add(keyValue.Key, tempArray);
}
return timeSeries;
}

使用Select/ToList 的可读性更高,但与简单的乘法相比,额外的接口(interface)调用开销非常大。

关于c# - C# 中的快速列表乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3279936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com