内置函数 diff() 可用于 MathNet 中的矢量?
built-in function diff() available for vector in MathNet?
我是 MathNet
的新手,正在 C#.Net
中实现代码。
有一个向量:
var X = new DenseVector(new double[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150 });
我需要找到 Y = **diff(X)**
计算 X
的相邻元素之间的差异,例如:
Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]
在MathNet
中是否有内置函数diff()可用?我在 MathNet.Numerics/Differentiate 上搜索过,但它不可用。
你是对的。它似乎不可用。但是这里有一个简单的函数来实现这一点。
public MathNet.Numerics.LinearAlgebra.Double.DenseVector
Diff(MathNet.Numerics.LinearAlgebra.Double.DenseVector X)
{
var R = new MathNet.Numerics.LinearAlgebra.Double.DenseVector(X.Count - 2);
for (var i = 0; i <= X.Count - 2; i++)
R(i) = X(i + 1) - X(i);
return R;
}
您可以利用 MathNet
的优点使其更具表现力。
static class VectorExtension
{
public static Vector<double> Differentiate(this Vector<double> vector)
{
var high = Vector<double>.Build.DenseOfEnumerable(vector.Skip(1));
var low = Vector<double>.Build.DenseOfEnumerable(vector.Take(vector.Count - 1));
return high - low;
}
}
然后
var X = new DenseVector(new double[] { 10, 20, 30, 40, 50, 60, 70 });
Console.WriteLine(X.Differentiate());
给予
DenseVector 6-Double
10
10
10
10
10
10
我是 MathNet
的新手,正在 C#.Net
中实现代码。
有一个向量:
var X = new DenseVector(new double[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150 });
我需要找到 Y = **diff(X)**
计算 X
的相邻元素之间的差异,例如:
Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]
在MathNet
中是否有内置函数diff()可用?我在 MathNet.Numerics/Differentiate 上搜索过,但它不可用。
你是对的。它似乎不可用。但是这里有一个简单的函数来实现这一点。
public MathNet.Numerics.LinearAlgebra.Double.DenseVector
Diff(MathNet.Numerics.LinearAlgebra.Double.DenseVector X)
{
var R = new MathNet.Numerics.LinearAlgebra.Double.DenseVector(X.Count - 2);
for (var i = 0; i <= X.Count - 2; i++)
R(i) = X(i + 1) - X(i);
return R;
}
您可以利用 MathNet
的优点使其更具表现力。
static class VectorExtension
{
public static Vector<double> Differentiate(this Vector<double> vector)
{
var high = Vector<double>.Build.DenseOfEnumerable(vector.Skip(1));
var low = Vector<double>.Build.DenseOfEnumerable(vector.Take(vector.Count - 1));
return high - low;
}
}
然后
var X = new DenseVector(new double[] { 10, 20, 30, 40, 50, 60, 70 });
Console.WriteLine(X.Differentiate());
给予
DenseVector 6-Double
10
10
10
10
10
10