3

我正在使用 Math.Net Numerics 库在 C# 中工作,主要使用Vector<T>对象Matrix<T>(进行线性回归、查找特征值等)。大多数情况下我正在使用复数,所以我正在使用(或矩阵等价物),但有时Vector<Complex>我也需要使用。Vector<Double>因此,我的问题是,我怎样才能将 aVector<Complex>转换为 a Vector<Double>?或者,有没有办法只获取/设置整个向量的实部(或虚部)?我在 C# 中执行此操作,这是一种我相对较新的语言(我主要使用 C/C++ 和 MATLAB),所以如果这看起来像一个简单的问题,我深表歉意。

可能的例子:

Vector<Double> someDoubleVector; // already exists
Vector<Complex> someComplexVector; // ditto
double[] doubleArray; // ditto
double[] anotherDoubleArray; // ditto
someDoubleVector = someComplexVector.GetReal();

或者

someDoubleVector = (Vector<Double>)someComplexVector;

或(设置真实)

someComplexVector.SetReal(someDoubleVector);

或者

someComplexVector.SetReal(doubleArray);

或创建时

Vector<Complex> anotherComplexVector = Vector<Complex>.Build.Dense(Vector<Double> realValues, Vector<Double> imagValues);
4

1 回答 1

4

您可以使用该Map方法在类型之间进行转换。如果你经常需要这个,你可以定义以下扩展方法:

static class VectorExtensions
{
    public static Vector<double> Real(this Vector<Complex> v)
    {
        return v.Map(x => x.Real);
    }
    public static Vector<double> Imag(this Vector<Complex> v)
    {
        return v.Map(x => x.Imaginary);
    }
}

然后只需调用

var someDoubleVector = someComplexVector.Real();

同样的方法也适用于其他类似的转换。

2015-12-30 更新:自 v3.10 起,此功能已集成到 Math.NET Numerics 中。

于 2015-01-21T00:48:54.893 回答