【发布时间】:2013-01-12 04:40:09
【问题描述】:
我想将一个稀疏矩阵从 MATLAB 传递给一个共享库,在那里进行一些操作(用 C 编写),然后返回它。
我可以传递一个密集的矩阵并使用,非常简单。但是,我不知道如何将稀疏矩阵从 MATLAB 传递给共享库。我发现的都是关于MEX的。
如果提供一些关于 MATLAB 中的稀疏矩阵格式和 C 中的转换的信息,我们将不胜感激。
提前致谢。
【问题讨论】:
标签: c matlab sparse-matrix mex
我想将一个稀疏矩阵从 MATLAB 传递给一个共享库,在那里进行一些操作(用 C 编写),然后返回它。
我可以传递一个密集的矩阵并使用,非常简单。但是,我不知道如何将稀疏矩阵从 MATLAB 传递给共享库。我发现的都是关于MEX的。
如果提供一些关于 MATLAB 中的稀疏矩阵格式和 C 中的转换的信息,我们将不胜感激。
提前致谢。
【问题讨论】:
标签: c matlab sparse-matrix mex
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] 是j 中第一个非零元素在ir 和pr(和pi,如果存在)中的索引-th 列,jc[j+1] - 1 是该列中最后一个非零元素的索引。对于稀疏矩阵的第j 列,jc[j] 是前面所有列中非零元素的总数。 jc 数组的最后一个元素jc[n] 等于nnz,即整个稀疏矩阵中非零元素的数量。
【讨论】: