c - 如何将稀疏矩阵从 MATLAB 传递到共享库

标签 c matlab sparse-matrix mex

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

我可以传递一个密集矩阵并使用,非常简单。但是,我不知道如何将稀疏矩阵从 MATLAB 传递到共享库。我发现的都是关于 MEX 的。

如果能提供一些关于 MATLAB 中的稀疏矩阵格式和 C 中的转换的信息,我们将不胜感激。

提前致谢。

最佳答案

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

  • 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/

相关文章:

c - 无法解析 header 中定义的 Eclipse C 常量

c - scanf() 将换行符保留在缓冲区中

java - 打开太多图形时如何避免 MATLAB 崩溃?

python - lil-稀疏矩阵行拆分

python - Numpy svd 与 Scipy.sparse svds

php - 扩展 PHP 以与 R 编程语言通信

c - 简单的 C 程序 ABACADABRA

matlab - ROC曲线和libsvm

matlab - 如何用对数刻度绘制 hist

MySQL(通常是 SQL)限制列