如何将 Vector<Complex> 转换为 Vector<Double>?
How can I cast Vector<Complex> to Vector<Double>?
我在 C# 中使用 Math.Net 数值库,主要使用 Vector<T>
和 Matrix<T>
对象(进行线性回归、查找特征值等)。大多数情况下,我使用的是复数,所以我使用 Vector<Complex>
(或等效矩阵),但有时我也需要使用 Vector<Double>
。因此,我的问题是如何将 Vector<Complex>
转换为 Vector<Double>
?或者,有没有办法只 get/set 整个 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);
您可以使用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 中。
我在 C# 中使用 Math.Net 数值库,主要使用 Vector<T>
和 Matrix<T>
对象(进行线性回归、查找特征值等)。大多数情况下,我使用的是复数,所以我使用 Vector<Complex>
(或等效矩阵),但有时我也需要使用 Vector<Double>
。因此,我的问题是如何将 Vector<Complex>
转换为 Vector<Double>
?或者,有没有办法只 get/set 整个 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);
您可以使用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 中。