我想将一个稀疏矩阵从 MATLAB 传递给一个共享库,在那里做一些操作(用 C 语言编写),然后返回它。
我可以传递一个密集的矩阵并使用,非常容易。但是,我不知道如何将稀疏矩阵从 MATLAB 传递给共享库。我发现的都是关于 MEX 的。
如果提供一些有关 MATLAB 中的稀疏矩阵格式和 C 中的转换的信息,我们将不胜感激。
提前致谢。
我想将一个稀疏矩阵从 MATLAB 传递给一个共享库,在那里做一些操作(用 C 语言编写),然后返回它。
我可以传递一个密集的矩阵并使用,非常容易。但是,我不知道如何将稀疏矩阵从 MATLAB 传递给共享库。我发现的都是关于 MEX 的。
如果提供一些有关 MATLAB 中的稀疏矩阵格式和 C 中的转换的信息,我们将不胜感激。
提前致谢。
MATLAB 在内部使用压缩稀疏列(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
, 整个稀疏矩阵中非零元素的数量。