c++ - Eigen 3 方阵除以列阵

标签 c++ eigen eigen3

我想将方形数组 (b) 的每一行除以列数组 (a) 的转置。

测试码也在godbolt.org ,其中安装了 eigen 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

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

最佳答案

断言告诉您您正在使用矩阵(又名二维数组),而预期使用编译时 vector (又名一维数组)。所以解决方案是将 a 定义为编译时一维数组:

ArrayXf a(3);

你也可以从标准线性代数的角度来看这个操作:

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

关于c++ - Eigen 3 方阵除以列阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52446972/

相关文章:

c++ - 用 Eigen 3 计算数组的特征值/vector 而不是矩阵

c++ - Eigen 乘以小矩阵很慢吗?

c++ - C 或 C++ 中的函数类型

c++ - 从数组中获取唯一的数字,完全删除重复项

c++ - 使用 Restbed 时出现链接器错误

c++ - 命名空间 ‘Eigen’ 中的 EigenvalueType’ 未命名类型

c - 是否可以将 Eigen 与 c 一起使用?

C++ : Data Structure withe fast searching and less memory requirements

c++ - 跨 conservativeResize 将 ColXpr 维护为 MatrixXf

c++ - 使用 Eigen 就地进行 LDLT 分解