我想将一个稀疏矩阵从 MATLAB 传递到一个共享库,在那里做一些操作(用 C 编写),然后返回它。
我可以传递一个密集矩阵并使用,非常简单。但是,我不知道如何将稀疏矩阵从 MATLAB 传递到共享库。我发现的都是关于 MEX 的。
如果能提供一些关于 MATLAB 中的稀疏矩阵格式和 C 中的转换的信息,我们将不胜感激。
提前致谢。
最佳答案
MATLAB 内部使用 Compressed sparse column 存储稀疏矩阵(CSC) 格式。一旦理解了格式,就可以通过获取数组 pr
将稀疏矩阵传递给外部代码。 , pi
, ir
, 和 jc
(分别使用 MEX 函数 mxGetPr、mxGetPi、mxGetIr、mxGetJc)。
pr
(和pi
如果矩阵是复数)是长度为nzmax
的 double 组包含矩阵的非零值。ir
指向一个长度也为nzmax
的整数数组包含pr
中相应元素的行索引和pi
.jc
指向长度为n+1
的整数数组, 其中n
是稀疏矩阵中的列数。jc
数组包含列索引信息。如果j
稀疏矩阵的第 - 列有任何非零元素,jc[j]
是ir
中的索引和pr
(和pi
如果存在的话)j
中的第一个非零元素-th 列,和jc[j+1] - 1
是该列中最后一个非零元素的索引。对于j
- 稀疏矩阵的第 列,jc[j]
是前面所有列中非零元素的总数。jc
的最后一个元素数组,jc[n]
, 等于nnz
,整个稀疏矩阵中非零元素的个数。
关于c - 如何将稀疏矩阵从 MATLAB 传递到共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14568863/