特征 - 稀疏矩阵的对角线更新
Eigen - diagonal update of sparse matrix
在 Eigen 中编辑稀疏矩阵的对角线最快的方法是什么?我已经用三元组填充了它,但我偶尔需要更改所有对角线值(它们已经设置为非零值)。
如果可以接受,您可以简单地使用它们的索引,例如
sp_mat(i, i)
由于每次访问都涉及二分查找,性能可能不尽如人意。在这种情况下,您仍然可以通过一些限制获得更好的性能。
- 您不更改矩阵的底层布局,例如adding/deleting nnzs,正在压缩;
- 您将重复访问对角线。
有了这些限制,您可以存储对角线分量的指针,以便稍后可以在 O(1) 时间内访问数据。您可以通过
获取指针
&sp_mat(i, i)
为了完成kangshiyin的回答,您还可以通过密集向量表达式编辑对角线,例如将每个对角线元素加1:
sp_mat.diagonal().array() += 1;
警告:这仅在对角线元素已经存在的情况下才有效,原始问题中就是这种情况。
在 Eigen 中编辑稀疏矩阵的对角线最快的方法是什么?我已经用三元组填充了它,但我偶尔需要更改所有对角线值(它们已经设置为非零值)。
如果可以接受,您可以简单地使用它们的索引,例如
sp_mat(i, i)
由于每次访问都涉及二分查找,性能可能不尽如人意。在这种情况下,您仍然可以通过一些限制获得更好的性能。
- 您不更改矩阵的底层布局,例如adding/deleting nnzs,正在压缩;
- 您将重复访问对角线。
有了这些限制,您可以存储对角线分量的指针,以便稍后可以在 O(1) 时间内访问数据。您可以通过
获取指针&sp_mat(i, i)
为了完成kangshiyin的回答,您还可以通过密集向量表达式编辑对角线,例如将每个对角线元素加1:
sp_mat.diagonal().array() += 1;
警告:这仅在对角线元素已经存在的情况下才有效,原始问题中就是这种情况。