将矩阵的列式总和保存在同一矩阵中

时间:2019-09-17 12:39:32

标签: c++ matrix eigen

我有以下代码:

#include <iostream>
#include <Eigen/Dense>

int main(int argc, char** argv) {

    Eigen::MatrixXd A(3, 3);

    A << 1, 2, 3,
         4, 5, 6,
         7, 8, 9;

    A = A.colwise().sum();

    std::cout << A;

    return 0;
}

这给了我“ 0 0 0”,而当我使用第二个Eigen :: MatrixXd B保存A.colwise()。sum()的结果然后打印B时,一切正常。因此,新的A大小或类似的内容似乎有问题。在不创建新的临时矩阵的情况下,正确的处理方法是什么?

1 个答案:

答案 0 :(得分:1)

这是一个别名问题。如果您确实希望将结果存储在A中,则可以编写

A = A.colwise().sum().eval();

但是无论如何您都需要为结果分配一个新对象,因此将结果存储在A中而不是将其存储到一个新对象中也没有真正的优势(而且,新对象实际上可以是一个RowVectorXd

演示:https://godbolt.org/z/S55r0t