我使用了Evd&lt;&gt; MathNet Numerics类获取矩阵的特征向量但结果是Vector<Complex>
类型,我无法将其转换为Vector<double>
,这是我操作所需要的。
这就是我得到特征向量的方法:
DenseMatrix processedData = someData;
Evd<> eigen = processedData.evd();
Vector<Complex> eigenvector = (Vector<Complex>)eigen.EigenValues;
当我尝试选择“Vector<double>
”时,程序不会接受它。
有没有办法在Vector<double>
?
答案 0 :(得分:2)
如果您想使用Math.NET Numerics v3显式声明所有类型(而不是使用var,有选择地),则需要打开以下命名空间:
using System.Numerics
using MathNet.Numerics
using MathNet.Numerics.LinearAlgebra
using MathNet.Numerics.LinearAlgebra.Factorization
通常不需要打开特定于类型的命名空间,例如MathNet.Numerics.LinearAlgebra.Double
,因为建议仅在引用矩阵或向量时使用通用Matrix<T>
类型。这样就没有必要在他们之间施放(正如你在你的例子中所做的那样)。
然后示例如下:
Matrix<double> processedData = Matrix<double>.Build.Random(5,5);
Evd<double> eigen = processedData.Evd();
Vector<Complex> eigenvector = eigen.EigenValues;
答案 1 :(得分:1)
它不仅仅是同一类的EigenVectors属性吗?
public abstract class Evd<T> : ISolver<T>
where T : struct, IEquatable<T>, IFormattable
{
/// <summary>
/// Gets or sets the eigen values (λ) of matrix in ascending value.
/// </summary>
public Vector<Complex> EigenValues { get; private set; }
/// <summary>
/// Gets or sets eigenvectors.
/// </summary>
public Matrix<T> EigenVectors { get; private set; }
}
真实的NxN矩阵将具有多达N个(不一定是唯一的)实特征值和相应的特征向量,因此两者都需要以数组的形式返回; 复杂 NxN矩阵将具有与相应的特征向量完全相同的N(不一定是唯一的)特征值。