C++ Eigen : why can one add-assign but not add for the method asDiagonal()

标签 c++ eigen

我注意到 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/

相关文章:

c++ - 如何限制用户只能选择某些驱动器?

c++ - C++如何在同一行中cin和cout?

c++ - 如何访问返回 vector 中的系数

c++ - 在 OPENMP 中并行添加矩阵 vector

c++ - 在 Eigen 中应用逆变换

c++ - Eigen 中范数、归一化和归一化之间的区别

c++ - 为什么 istream/ostream 慢

c++ - 如何打印属于 map 的一系列元素 (std::pair<size_t, std::string>)(不是所有元素)

c++ - 在 64 位操作系统上运行的 32 位应用程序

c++ - boost::Eigen::MatrixXf 的无锁队列