Azzera filtri
Azzera filtri

Sparse matrices: find indices of non-zero elements in C code

5 visualizzazioni (ultimi 30 giorni)
I am using the MATLAB Engine interface, and I need to be able to handle sparse matrices.
Starting with an mxArray pointer which turns out to be a sparse matrix, is there an easy way to find the indices and values of non-zero matrix elements---all in C code without calling back to MATLAB?
What I have easy access to is the IR and JC arrays. Are there any functions provided to compute from these the index and value lists?

Risposta accettata

James Tursa
James Tursa il 1 Feb 2013
Here is a simple mex routine that mimics the display functionality for sparse matrices (prints only the non-zero values). You should be able to easily extract the indexing code you need from this. The code prints out indexes in 1-based indexing for display purposes, but if you need 0-based indexing an easy -1 adjustment can be made to the code.
#include "mex.h"
void spprint(const mxArray *mx);
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
if( nrhs ) spprint(prhs[0]);
}
void spprint(const mxArray *mx)
{
mwSize n, nrow;
mwIndex *ir, *jc;
mwIndex j, x, y;
double *pr;
if( !(mx && mxIsSparse(mx) && mxIsDouble(mx)) ) return;
n = mxGetN(mx);
pr = mxGetData(mx);
ir = mxGetIr(mx);
jc = mxGetJc(mx);
for( y=0; y<n; y++ ) {
nrow = jc[y+1] - jc[y];
for( x=0; x<nrow; x++ ) {
mexPrintf(" (%d,%d) %g\n",(*ir++)+1,y+1,*pr++);
}
}
}

Più risposte (1)

Jan
Jan il 1 Feb 2013

Categorie

Scopri di più su Programming in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by