如何使用 hmatrix 乘以稀疏矩阵
How to multiply sparse matrices using hmatrix
我有一个维度 3329×3329
的矩阵 m
,其中有很多零字段,我想计算 m^9
。
在尝试使用 matrix
包(Data.Matrix
很容易使用)之后,我认为稀疏矩阵可以更好地表示内存使用情况和计算速度。所以我想弄清楚如何使用 hmatrix
包。我已经设法创建了一个稀疏矩阵:
module Example where
import Numeric.LinearAlgebra as LA
assocExample :: AssocMatrix
assocExample = [((0,0), 1),((3329,5),1)]
sparseExample :: GMatrix
sparseExample = LA.mkSparse assocExample
此时我的问题似乎是我有一个 GMatrix
,但是对于乘法运算符 (<>)
,我需要一个 Matrix t
。
通过查看关于 hackage 的 hmatrix 文档,我没有弄清楚如何在此处获得 Matrix t
。
我也快速浏览了 introduction to hmatrix,但其中甚至没有提到术语 sparse
。
我的直觉是这应该很容易做到,但我遗漏了一些简单的东西。
据我所知,稀疏矩阵在 hmatrix 中还很年轻。查看文档似乎没有稀疏矩阵的产品。你必须自己实现它。
编辑:如果您这样做了,请在此处发表评论:https://github.com/albertoruiz/hmatrix/issues/162(也证实了我上面的陈述)
我有一个维度 3329×3329
的矩阵 m
,其中有很多零字段,我想计算 m^9
。
在尝试使用 matrix
包(Data.Matrix
很容易使用)之后,我认为稀疏矩阵可以更好地表示内存使用情况和计算速度。所以我想弄清楚如何使用 hmatrix
包。我已经设法创建了一个稀疏矩阵:
module Example where
import Numeric.LinearAlgebra as LA
assocExample :: AssocMatrix
assocExample = [((0,0), 1),((3329,5),1)]
sparseExample :: GMatrix
sparseExample = LA.mkSparse assocExample
此时我的问题似乎是我有一个 GMatrix
,但是对于乘法运算符 (<>)
,我需要一个 Matrix t
。
通过查看关于 hackage 的 hmatrix 文档,我没有弄清楚如何在此处获得 Matrix t
。
我也快速浏览了 introduction to hmatrix,但其中甚至没有提到术语 sparse
。
我的直觉是这应该很容易做到,但我遗漏了一些简单的东西。
据我所知,稀疏矩阵在 hmatrix 中还很年轻。查看文档似乎没有稀疏矩阵的产品。你必须自己实现它。
编辑:如果您这样做了,请在此处发表评论:https://github.com/albertoruiz/hmatrix/issues/162(也证实了我上面的陈述)