c++ 稠密矩阵到稀疏矩阵的特征转换

bz4sfanl  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(342)

如何将Eigen::Matrix<double,Dynamic,Dynamic>转换为Eigen::SparseMatrix<double>?我正在寻找一种更好的方法,而不是迭代密集矩阵

jmo0nnb3

jmo0nnb31#

你可以使用sparseView()方法来实现这个目的:
sparse = dense.sparseView();
甚至指定公差:
sparse = dense.sparseView(reference,epsilon);

brqmpdu1

brqmpdu12#

您是否控制密集矩阵的创建?
如果你不这样做,那么就没有办法做到这一点,而不阅读每个矩阵元素,看看它是否为空。
如果您自己创建密集矩阵,则可以创建一个数据结构,以便在需要时帮助将其转换为稀疏矩阵。例如,您可以存储矩阵的每一行中非空元素的数量。然后,您可以跳过包含0个非空元素的行,并且在您看到计数告诉您的非空元素数量后,可以停止任何行的转换。
存储的额外数据取决于您期望的稀疏矩阵类型。常见的稀疏矩阵模式是稀疏矩阵中浮动的密集子矩阵。您可以在创建密集矩阵时表示这些密集区域。例如,不存储每行的元素计数,而是保留特定x,y偏移的非空矩形区域列表。

相关问题