将特征向量作为&#39; Vector <double>&#39;使用MathNet Numerics从最重要到最少列出?</double>

时间:2014-07-13 03:49:54

标签: c# vector eigenvector mathnet

我使用了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>

中获取矩阵的特征向量

注意:之前我曾问过这个问题,但忽略了格式化我的代码,因此<double>没有出现,所以答案不是我想要的。

1 个答案:

答案 0 :(得分:0)

NxN实矩阵必然具有N个复特征值,如果N是奇数,其中1到N的任何一个都是实数,如果N是偶数,则0到N实数。

创建一个(可能更小的)Vector<double>,其中只包含复特征值向量中的实特征值:

  1. Enumerate通过向量中的每个complex item
  2. 通过查看IsReal属性来过滤掉所有不真实的内容。
  3. 对于那些真实的,提取Real组件,
  4. 来自您的可枚举的
  5. Construct a new DenseVector<double>
  6. (或者你可以创建一个相同维度的SparseVector<double>,只在与真实特征值对应的位置创建值,如果这样更有用。我不知道你想用什么做什么本征值。)