临时矩阵乘积的本征算子(Index, Index)

Eigen operator(Index, Index) of a temporary matrix product

假设我只对矩阵乘积的单个 (i, j) 元素感兴趣,所以我 (A * B)(i, j)。 Eigen 会计算 AB 的完整乘积然后访问 (i, j) 元素还是它会很聪明并且只计算必要的?如果没有,我该怎么办?

出于内存原因,我目前正在进行基于 SVD 的有损矩阵压缩,因此我想存储 SVD 的 U、S 和 V 矩阵,并动态计算原始矩阵的元素:aij = (U * S.asDiagonal() * V.transpose())(i,j)特此提问

好问题。按系数计算矩阵积是低效的,在当前版本的 Eigen 中,因此禁止在矩阵积上调用 operator(i,j) (在编译时)。因此,如果您访问大部分 aij,最好暂时评估它。如果您以非结构化方式访问其中的一小部分,那么您可以将其包装在一个实现的函数中:

return U.row(i) * S.asDiagonal() * V.row(j).transpose();

在 Eigen 的未来版本中,即 3.3 或 3.4,Eigen 会自动为您将信息传播到表达式树的叶子。