gpt4 book ai didi

matlab - 从 Matlab CSC 到 CSR 格式的转换

转载 作者:行者123 更新时间:2023-12-02 22:36:43 46 4
gpt4 key购买 nike

我正在使用 mex bridge 在 Matlab 中对稀疏矩阵执行一些操作。为此,我需要将输入矩阵转换为 CSR(压缩行存储)格式,因为 Matlab 将稀疏矩阵存储在 CSC(压缩列存储)中。

我能够获取值数组和 column_indices 数组。但是,我正在努力获取 CSR 格式的 row_pointer 数组。是否有任何 C 库可以帮助从 CSC 转换为 CSR?

此外,在编写 CUDA 内核时,使用 CSR 格式进行稀疏操作是否有效,还是我应该只使用以下数组:- 行索引、列索引和值?

哪个能让我更好地控制数据,最大限度地减少自定义内核中的循环次数?

最佳答案

压缩行存储与压缩列存储类似,只是转置了。因此,最简单的方法是在将矩阵传递到 MEX 文件之前使用 MATLAB 对其进行转置。然后,使用函数

Ap = mxGetJc(spA);
Ai = mxGetIr(spA);
Ax = mxGetPr(spA);

获取内部指针并将它们视为行存储。 Ap 是行指针,Ai 是非零条目的列索引,Ax 是非零值。请注意,对于对称矩阵,您根本不需要做任何事情! CSC和CSR是一样的。

主要使用哪种格式取决于您以后要对矩阵执行的操作。例如,看看 matrix formats用于稀疏矩阵向量乘法。那是一篇经典论文,从那时起研究就发生了变化,因此您可以进一步查看。

关于matlab - 从 Matlab CSC 到 CSR 格式的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370549/

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