这是有关c ++ Eigen库的查询。
[在计算中,我经常遇到块对角线形式的矩阵。下面是一个简单的结构示例。
Matrix6f M = Matrix6f::Zero(); //< M has a special structure
M.block<3, 3,>(0, 0) = Matrix3f::Random();
M.block<3, 3,>(3, 3) = Matrix3f::Random();
Matrix6f out = M * Matrix6f::Random(); //< Want to optimize this operation
现在,假设我有一个密集的6x6矩阵I
,需要评估乘积M*I
,有什么方法可以避免必须对M
中所有零执行冗余的乘法/加法运算? 。没有明确写出乘法就是。
Eigen具有这种简洁的功能,如果我执行auto u = v + w
,我将得到一个没有实际评估的运算符。这似乎也适用于auto z = Matrix6f::Zero()
,并且如果我曾经做过Matrix6f out = z + Matrix6f::Random()
,我可以想象在特殊的Zero
矩阵上写一个运算符,这样我就可以有效地返回随机矩阵的元素而不必尝试加零对此。
上面列出的特定示例是否有可能这样?
[如果对零矩阵使用新类,则可以重载*
运算符