稀疏矩阵的线性代数库

10

我有意将我的Matlab实现移植到C++以提高速度。我尝试了Armadillo。它非常适合从Matlab移植代码,因为Armadillo的库函数名称/语法非常接近Matlab编程。然而,我意识到在某些地方Matlab表现超过了Armadillo,因为我的数据主要是稀疏的,而Armadillo不会给予任何特殊处理,只是将其视为密集矩阵。Armadillo团队正在开发支持稀疏矩阵的功能,但目前还没有可用。因此,我正在寻找一个类似于Armadillo的库,具有非常接近Matlab的语法(或易于使用),并支持稀疏矩阵进行速度和空间优化。


11
在将您的代码移植到C++之前,您应该确信这样做是值得的。在SO上,有很多关于人们认为他们可以编写C++代码来优化Matlab性能的悲惨故事,他们不明白即使付出了巨大努力,为什么仍然失败了。在许多情况下,问题在于他们没有意识到对于许多核心数学例程,Matlab使用的是编译好的代码。实际上,他们尝试编写的是比Mathworks专家编写的编译代码更高效的C++代码。 - High Performance Mark
2
我同意High Performance Mark的观点。Matlab内置函数非常高效和优化。它们是基于古老的Fortran或C代码构建的,具有高度的效率。如果您在Matlab脚本中使用向量化代码,那么很可能Matlab会胜过其他线性代数函数实现。您需要加速什么? - reverse_engineer
1
你是否考虑过使用GPU计算来加速你的代码?Jacket非常出色,提供了针对此类问题的稀疏函数。 - Ben Stewart
1
@HighPerformanceMark、user1241315和Ben Stewart,感谢你们的回复。我进行了一些速度比较,并意识到你们所说的正是事实。Ben Stewart,感谢你的建议。我也会去寻找它。 - Haider
感谢您回来并更新我们。 - High Performance Mark
3个回答

1
版本3.6.2具有更多的稀疏矩阵支持。

1

不确定您想要做什么,但可以尝试SPAMS。它是一个好的、快速的稀疏建模实现。


0

从3.4版本开始,Armadillo具有稀疏矩阵的初步支持。这在未来的版本中可能会更加完善。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接