如何从MATLAB将稀疏矩阵传递给共享库

时间:2013-01-28 18:39:46

标签: c matlab sparse-matrix mex

我想将稀疏矩阵传递给MATLAB的共享库,在那里做一些操作(用C语言编写),然后返回它。

我可以通过密集矩阵并使用,非常简单。但是,我不知道如何将稀疏矩阵传递给MATLAB的共享库。我发现所有人都关心MEX。

如果在MATLAB中提供有关稀疏矩阵格式的信息以及在C中进行转换,我们将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:2)

内部MATLAB使用Compressed sparse column(CSC)格式存储稀疏矩阵。一旦理解了格式,就可以通过获取数组prpiirjc(使用MEX函数)将稀疏矩阵传递给外部代码分别为mxGetPrmxGetPimxGetIrmxGetJc

  • pr(如果矩阵很复杂,则为pi)是一个长度为nzmax的双精度数组,其中包含矩阵的非零值。

    < / LI>
  • ir指向长度为nzmax的整数数组,其中包含prpi中相应元素的行索引。

    < / LI>
  • jc指向长度为n+1的整数数组,其中n是稀疏矩阵中的列数。 jc数组包含列索引信息。如果稀疏矩阵的j列具有任何非零元素,则jc[j]irpr中的索引(如果存在则为pi)第j列中的第一个非零元素,jc[j+1] - 1是该列中最后一个非零元素的索引。对于稀疏矩阵的j - 列,jc[j]是所有前面列中非零元素的总数。 jc数组的最后一个元素jc[n]等于nnz,即整个稀疏矩阵中非零元素的数量。