gpt4 book ai didi

c - 如何在 C 中将两个稀疏矩阵相乘?

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:57 24 4
gpt4 key购买 nike

我有一个稀疏矩阵 D,我想将 D_transpose 和 D 相乘得到 L,如下所示:

L = D'*D;

我正在使用 sparseBLAS 来处理稀疏矩阵,但是 documentation说没有什么可以乘以两个稀疏矩阵。

我完全卡住了,不知道如何继续。

D 的尺寸通常约为 500,000 x 250,000。我根本无法分配那么多内存,所以只能使用稀疏矩阵来完成。

我是用 MATLAB 做的,如果 MATLAB 在接口(interface)下也使用 sparseBLAS,我不明白它是如何做的——或者是吗?如果不是,它有什么用?我也可以使用它。

感谢阅读!

编辑:已解决。我需要 L 矩阵与 vector 相乘。因此,我没有首先计算 L,而是简单地计算了 D'*(D*x),从而避免了两个稀疏矩阵相乘的需要。我现在只做稀疏矩阵和稠密 vector 乘法,这是sparseBLAS支持的。

最佳答案

Intel 的库 MKL 支持两个稀疏矩阵的乘积。您可以从 MKL 的引用中查看例程 mkl_sparse_spmm。 (旧版本的 MKL 使用现在已弃用的例程 mkl_?csrmultcsr。)

此外,还有一个古老但广泛使用的开源和线程安全的稀疏矩阵库 SPARSKIT(及其更新版本 SPARSKIT2)。都是F77写的。有一个例程 amub 可用于获取两个稀疏矩阵的乘积。您可以检查是否有人将此库重写为 C。

关于c - 如何在 C 中将两个稀疏矩阵相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18637449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com