встроенная функция diff () доступна для вектора в MathNet? - PullRequest
0 голосов
/ 16 октября 2018

Я новичок в 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)]

Есть ли построено-в функции diff () доступно в MathNet?Я искал на MathNet.Numerics / дифференцировать , но он недоступен.

Ответы [ 2 ]

0 голосов
/ 01 августа 2019

Вы можете использовать преимущества 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
0 голосов
/ 22 октября 2018

Вы правы.Это не кажется доступным.Но вот простая функция для достижения этого.

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;
}
...