我有以下代码:
#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大小或类似的内容似乎有问题。在不创建新的临时矩阵的情况下,正确的处理方法是什么?
答案 0 :(得分:1)
这是一个别名问题。如果您确实希望将结果存储在A
中,则可以编写
A = A.colwise().sum().eval();
但是无论如何您都需要为结果分配一个新对象,因此将结果存储在A
中而不是将其存储到一个新对象中也没有真正的优势(而且,新对象实际上可以是一个RowVectorXd
)