首页 > 解决方案 > 用 Eigen 3 计算数组的特征值/向量而不是矩阵

问题描述

我想计算数组而不是矩阵的特征值/向量。

我试过EigenSolver<ArrayXf>了,但这会产生编译错误。

我可以将数组复制到矩阵。但这是对内存的浪费。

以下代码给出了分段错误。

测试1:

#include <Eigen/Eigen>
using namespace Eigen;
int main() {
    ArrayXf A = ArrayXf::Ones(3,3);
    EigenSolver<MatrixXf> es(A);
}

结果:

<...>/Eigen/src/Core/util/XprHelper.h:130: 
Eigen::internal::variable_if_dynamic<T, Value>::variable_if_dynamic(T) 
[with T = long int; int Value = 1]: Assertion `v == T(Value)' failed.
Aborted (core dumped)

我也试过了EigenSolver<MatrixXf> es(A.matrix())。但这也行不通。

测试2:

#include <Eigen/Eigen>
using namespace Eigen;
int main() {
    ArrayXf A = ArrayXf::Ones(3,3);
    EigenSolver<MatrixXf> es(A.matrix());
}

结果:

<...>/XprHelper.h:130: Eigen::internal::variable_if_dynamic<T, Value>::variable_if_dynamic(T) [with T = long int; int Value = 1]: Assertion `v == T(Value)' failed.
Aborted (core dumped)

标签: c++eigeneigen3

解决方案


问题是这ArrayXf是一个一维数组,而你想要一个二维数组:ArrayXXf.

一些历史:我们在引入 Array 之前提出了 VectorXf/MatrixXf 名称,其中没有自然名称来区分 1D 和 2D,因此单 X 与双 XX...


推荐阅读