让我们说我只对矩阵产品的单个(i,j)元素感兴趣,所以我做(A * B)(i, j)
。 Eigen会计算A
和B
的完整产品,然后访问(i,j)元素,还是会很聪明,只计算必要的内容?如果没有,我该怎么办呢?
由于内存原因,我目前正在进行基于SVD的有损矩阵压缩,因此我希望存储SVD的U,S和V矩阵并动态计算原始矩阵的元素:{{1}我的问题。
答案 0 :(得分:1)
好问题。计算矩阵乘积系数是低效的,并且在当前版本的Eigen中,因此禁止在矩阵乘积上调用算子(i,j)(在编译时)。因此,如果您访问大部分aij,最好在临时评估它。如果以非结构化方式访问其中的极少数,则可以将其包装在实现:
的函数中return U.row(i) * S.asDiagonal() * V.row(j).transpose();
在未来的Eigen版本中,只有3.3或3.4,Eigen会自动将信息传播到表达式树的叶子中。