使用特征3计算数组的特征值/向量而不是矩阵

时间:2018-09-13 16:02:41

标签: c++ eigen eigen3

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

我尝试了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())。但这也不起作用。

Test2:

#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)

1 个答案:

答案 0 :(得分:1)

问题在于ArrayXf是一维数组,而您想要一个二维数组:ArrayXXf

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