2

我使用 MathNet Numerics 的 Evd<> 类来获取矩阵的特征向量,但结果证明它是类型的Vector<Complex>,我无法将其转换为Vector<double>,这是我的操作所需要的。

这就是我得到特征向量的方式:

DenseMatrix processedData = someData;
Evd<> eigen = processedData.evd();
Vector<Complex> eigenvector = (Vector<Complex>)eigen.EigenValues;

当我尝试强制转换为 ' Vector<double>' 时,程序不会接受它。有没有办法得到矩阵的特征向量Vector<double>

4

2 回答 2

3

如果您想使用 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;
于 2014-07-12T05:59:00.520 回答
2

不就是同一个类 的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; }
}

此处的文档:http: //numerics.mathdotnet.com/api/MathNet.Numerics.LinearAlgebra.Factorization/Evd%601.htm#EigenVectors

一个实数 NxN 矩阵将有多达 N 个(不一定是唯一的)实数特征值和相应的特征向量,因此都需要在数组中返回;一个复杂的NxN 矩阵将恰好具有 N 个(不一定是唯一的)特征值和相应的特征向量。

于 2014-07-12T04:25:20.740 回答