我注意到 Eigen 中有一些意想不到的行为:
int n=10; //value is irrelevant
Eigen::MatrixXd A(n);
Eigen::VectorXd v(n);
//works:
Eigen::MatrixXd B = A;
B += v.asDiagonal();
//error:
Eigen::MatrixXd C = A + v.asDiagonal();
在第二种情况下,编译器提示没有合适的operator+
可用MatrixXd
和一个 DiagonalWrapper<...>
. (其他运营商也是如此)。
这是故意的吗?如果是,是否有绕过两行替代方案的巧妙方法(先分配,然后减去)?
最佳答案
不幸的是,这似乎是预期的行为(可能是由于优化原因,但这只是一个猜测)。但是,您可以执行以下操作:
Eigen::MatrixXd C = A + v.asDiagonal().toDenseMatrix();
关于C++ Eigen : why can one add-assign but not add for the method asDiagonal(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43669660/