如何将Vector <complex>转换为Vector <double>?</double> </complex>

时间:2015-01-20 23:20:51

标签: c# mathdotnet

我在C#中使用Math.Net Numerics库,主要使用Vector<T>Matrix<T>个对象(进行线性回归,找到特征值等等)。主要是我使用复杂的数字,因此我使用Vector<Complex>(或等效的矩阵),但我有时也需要使用Vector<Double>。因此,我的问题是如何将Vector<Complex>投射到Vector<Double>?或者,有没有办法获得/设置整个Vector的真实(或虚构)部分?我在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);

1 个答案:

答案 0 :(得分:3)

您可以使用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中。