本征3方阵除以列阵

时间:2018-09-21 15:33:06

标签: c++ eigen eigen3

我想用方阵(b)的转置来划分方阵(a)的每一行。

测试代码也位于godbolt.org,其中安装了本征3库。

预期结果:

// before (a)
2
2
2
// before (b)
2 2 2
4 4 4
6 6 6
// after
1 1 1
2 2 2
3 3 3

测试:

#include <Eigen/Eigen>
#include <iostream>
using namespace Eigen;

int main() {
    ArrayXXf a(3, 1);
    a << 2, 2, 2;
    ArrayXXf b(3, 3);
    b << 2, 2, 2, 4, 4, 4, 6, 6, 6;
    std::cout << a << "\n";
    std::cout << b << "\n";
    b.rowwise() /= a.transpose();
    std::cout << b << "\n";
}

编译错误

...
error: static assertion failed: YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX
...

相关问题:

Eigen: Divide each row by last row

可接受的答案是在转换为本征数组的本征矩阵上按行使用。我只是不明白为什么它在我的情况下不起作用...

1 个答案:

答案 0 :(得分:1)

该断言告诉您您正在使用矩阵(aka 2D数组),而期望使用编译时向量(aka 1D数组)。因此解决方案是将a定义为编译时一维数组:

ArrayXf a(3);

您还可以根据标准线性代数查看此操作:

VectorXd a(3);
MatrixXd b(3,3);
b = b * a.asDiagonal().inverse();