在Eigen 3.2.10中,(* =)不能在ColMajor稀疏矩阵的行视图上操作

时间:2016-10-11 02:59:08

标签: reference sparse-matrix eigen

似乎(* =)不能在Eigen 3.2.10中的ColMajor稀疏矩阵的行视图上操作,如下所示

    SparseMatrix<double, ColMajor> spmat(3, 3);
    spmat.coeffRef(0, 0) = 1.1;
    spmat.coeffRef(1, 1) = 2.2;
    spmat.coeffRef(2, 2) = 3.3;
    spmat.row(2) *= 2.0;   // compile failed!

spmat.row(2)类型中的SparseMatrix<double, ColMajor>是只读类型,而不是引用类型。 在Eigen 3.2.10的更改日志中,它表示“修复了对列主要(resp.row-major)稀疏矩阵的行(resp。列)的支持”,但我认为操作* =在ColMajor的行视图中sparmatrix是必要的,所以有人能很好地解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

如果需要保留在3.2分支上,则可以这样解决(Future() instances):

spmat.middleRows(2,0) *= 2.0;

更好的是,在进行很多行操作时,更新到Eigen 3.3,或考虑使用行优先矩阵。