我想用方阵(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
可接受的答案是在转换为本征数组的本征矩阵上按行使用。我只是不明白为什么它在我的情况下不起作用...
答案 0 :(得分:1)
该断言告诉您您正在使用矩阵(aka 2D数组),而期望使用编译时向量(aka 1D数组)。因此解决方案是将a
定义为编译时一维数组:
ArrayXf a(3);
您还可以根据标准线性代数查看此操作:
VectorXd a(3);
MatrixXd b(3,3);
b = b * a.asDiagonal().inverse();