Finding CRS format of matrix in Mex

Hi,
I am using mex bridge to perform some operations sparse matrices from matlab.One of the operations requires me to convert matrix from CSC to CRS format. I was able to get values and col_indices arrays. However, I am not able to understand the exact method by which I can extract row_pointers array of a given matrix in CSC format.
Any help/suggestions will be appreciated.
Thanks in advance.
Cheers.

回答(2 个)

James Tursa
James Tursa 2012-7-8
Can't you just transpose it within MATLAB, and then treat the resulting row indexes as column indexes and column "pointers" as row "pointers" in the CRS format?
Abhishek
Abhishek 2012-7-8
Thanks for reply. I have to perform some operation on sparse matrices in CUDA. For that I need first matrix in CRS format. So transposing it might increase the runtime since I have to deal with sparse matrices with million non zeros. I think I will have to use some library that might help in finding the CSR format.

3 个评论

The CSC format that MATLAB uses stores the data in column order. As I understand it, the CSR format stores the data in row order. You will never get the MATLAB data into a routine (e.g., your CUDA) expecting the data in row order without transposing it. Does your CUDA routine have any options for using the transpose of the input w/o physically doing the transpose up front? Also, I think you misunderstood my first reply. The physical transpose of the CSC format is the CSR format ... i.e. transposing it does the conversion for you. You don't need a separate routine for this. You just need to interpret the resulting row indexes as column indexes, and treat the resulting column pointers as row pointers.
James,
Yes I am fully aware of the reversal of roles of col_ptrs into row_ptrs and row_indices into col_indices when we transpose it. What I want is to transpose it inside the mex routine that I am writing. And yes there are facilities in CUDA that I have tried which allow us to change the format from CSC to CSR. cuSPARSE and CUSP are two such examples of libraries.I guess, I will have to use one of them.
Thanks again.
You can use mexCallMATLAB with your MATLAB variable as the input and call the "transpose" function.

请先登录,再进行评论。

类别

在 帮助中心 和 File Exchange 中查找有关 Data Exploration 的更多信息

提问:

2012-7-6

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by