我在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);
答案 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中。