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 日

0 投票

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 日

0 投票

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 件のコメント

James Tursa
James Tursa 2012 年 7 月 8 日
編集済み: James Tursa 2012 年 7 月 8 日
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.
Abhishek
Abhishek 2012 年 7 月 8 日
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.
James Tursa
James Tursa 2012 年 7 月 8 日
You can use mexCallMATLAB with your MATLAB variable as the input and call the "transpose" function.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

質問済み:

2012 年 7 月 6 日

Community Treasure Hunt

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

Start Hunting!

Translated by