如何将一个转换Eigen::Matrix<double,Dynamic,Dynamic>
为一个Eigen::SparseMatrix<double>
?我正在寻找一种更好的方法,而不是遍历密集矩阵
问问题
10794 次
2 回答
27
您可以为此使用 sparseView() 方法:
sparse = dense.sparseView();
甚至指定一个公差:
sparse = dense.sparseView(epsilon,reference);
于 2012-10-24T06:11:51.123 回答
1
你控制密集矩阵的创建吗?
如果你不这样做,那么如果不读取每个矩阵元素以查看它是否为空,就无法做到这一点。
如果您自己创建密集矩阵,您可以创建一个数据结构来帮助您在需要时将其转换为稀疏矩阵。例如,您可以在每个矩阵行中存储该行中非空元素的数量。然后,您可以跳过包含 0 个非空元素的行,一旦您看到计数告诉您的非空元素数量,您就可以停止任何行的转换。
您存储的额外数据取决于您期望的稀疏矩阵类型。一种常见的稀疏矩阵模式是在稀疏矩阵中浮动的密集子矩阵。当您创建密集矩阵时,您可以对那些密集区域进行标注。例如,不存储每行的元素计数,而是在某些 x,y 偏移处保留非空矩形区域的列表。
于 2012-10-23T15:46:41.413 回答