[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

### A.2.6 Sparse Matrices with Mex-Files

The Octave format for sparse matrices is identical to the mex format in that it is a compressed column sparse format. Also in both, sparse matrices are required to be two-dimensional. The only difference is that the real and imaginary parts of the matrix are stored separately.

The mex-file interface, as well as using `mxGetM`

, `mxGetN`

,
`mxSetM`

, `mxSetN`

, `mxGetPr`

, `mxGetPi`

,
`mxSetPr`

and `mxSetPi`

, the mex-file interface supplies the
functions

mwIndex *mxGetIr (const mxArray *ptr); mwIndex *mxGetJc (const mxArray *ptr); mwSize mxGetNzmax (const mxArray *ptr); void mxSetIr (mxArray *ptr, mwIndex *ir); void mxSetJc (mxArray *ptr, mwIndex *jc); void mxSetNzmax (mxArray *ptr, mwSize nzmax); |

`mxGetNzmax`

gets the maximum number of elements that can be stored
in the sparse matrix. This is not necessarily the number of non-zero
elements in the sparse matrix. `mxGetJc`

returns an array with one
additional value than the number of columns in the sparse matrix. The
difference between consecutive values of the array returned by
`mxGetJc`

define the number of non-zero elements in each column of
the sparse matrix. Therefore

mwSize nz, n; mwIndex *Jc; mxArray *m; … n = mxGetN (m); Jc = mxGetJc (m); nz = Jc[n]; |

returns the actual number of non-zero elements stored in the matrix in
`nz`

. As the arrays returned by `mxGetPr`

and `mxGetPi`

only contain the non-zero values of the matrix, we also need a pointer
to the rows of the non-zero elements, and this is given by
`mxGetIr`

. A complete example of the use of sparse matrices in
mex-files is given by the file ‘`mysparse.c`’ as seen below