我想将稀疏矩阵传递给MATLAB的共享库,在那里做一些操作(用C语言编写),然后返回它。
我可以通过密集矩阵并使用,非常简单。但是,我不知道如何将稀疏矩阵传递给MATLAB的共享库。我发现所有人都关心MEX。
如果在MATLAB中提供有关稀疏矩阵格式的信息以及在C中进行转换,我们将不胜感激。
提前致谢。
答案 0 :(得分:2)
内部MATLAB使用Compressed sparse column(CSC)格式存储稀疏矩阵。一旦理解了格式,就可以通过获取数组pr
,pi
,ir
和jc
(使用MEX函数)将稀疏矩阵传递给外部代码分别为mxGetPr,mxGetPi,mxGetIr,mxGetJc。
pr
(如果矩阵很复杂,则为pi
)是一个长度为nzmax
的双精度数组,其中包含矩阵的非零值。
ir
指向长度为nzmax
的整数数组,其中包含pr
和pi
中相应元素的行索引。
jc
指向长度为n+1
的整数数组,其中n
是稀疏矩阵中的列数。 jc
数组包含列索引信息。如果稀疏矩阵的j
列具有任何非零元素,则jc[j]
是ir
和pr
中的索引(如果存在则为pi
)第j
列中的第一个非零元素,jc[j+1] - 1
是该列中最后一个非零元素的索引。对于稀疏矩阵的j
- 列,jc[j]
是所有前面列中非零元素的总数。 jc
数组的最后一个元素jc[n]
等于nnz
,即整个稀疏矩阵中非零元素的数量。