使用 Math.Net C# 的数字以数字方式添加两个向量的值
本文关键字:数字 两个 向量 方式 Net Math 使用 添加 | 更新日期: 2023-09-27 18:36:27
我有两个向量,如下所示:
vdA = { 8.0, 7.0, 6.0 }
vdB = { 0.0, 1.0, 2.0, 3.0 }
我基本上想要一个矢量 vdX,结果是将 vdA 的所有元素与 vdB 的所有值相加。
vdX = {
8.0, 9.0, 10.0 11.0,
7.0, 8.0, 9.0, 10.0,
6.0, 7.0, 8.0, 9.0
}
使用MathNet.Numerics,我找不到一个函数来做到这一点。
在 C# 中,我编写此代码来执行此操作
Vector<double> vdA = new DenseVector(new[] { 8.0, 7.0, 6.0 });
Vector<double> vdB = new DenseVector(new[] { 0.0, 1.0, 2.0, 3.0 });
List<double> resultSumVector = new List<double>();
foreach (double vectorValueA in vdA.Enumerate())
foreach (double vectorValueB in vdB.Enumerate())
resultSumVector.Add(vectorValueA + vectorValueB);
Vector<double> vdX = new DenseVector(resultSumVector.ToArray());
是否有其他选项可以使用 c# 中的 Math.Net 数字更快地完成此操作?
你基本上需要在 Linq 中进行交叉联接。你可以编写一个扩展方法,这样它看起来像是一个 Math.Net 方法:
namespace MathNet.Numerics
{
public static class DenseVectorExtensions
{
public static DenseVector AddAlls(this DenseVector vdA, DenseVector vdB)
{
return DenseVector.OfEnumerable(
vdA.SelectMany(x => vdB, (y, z) => { return y + z; })
);
}
}
}
用法:
var vdA = new DenseVector(new[] { 8.0, 7.0, 6.0 });
var vdB = new DenseVector(new[] { 0.0, 1.0, 2.0, 3.0 });
var vdX = vdA.AddAlls(vdB);
这不是特别快。