MATLAB Coder:稀疏矩阵

Posted

技术标签:

【中文标题】MATLAB Coder:稀疏矩阵【英文标题】:MATLAB Coder: sparse matrix 【发布时间】:2014-04-24 20:43:41 【问题描述】:

MATLAB Coder 看起来很花哨,可以通过将代码转换为 C/C++ 或 MEX 来大大加快 MATLAB 代码的运行速度。但是它似乎不支持稀疏矩阵,或者 matlab 函数 sparse 这对于我的代码。有谁知道如何克服这个问题?非常感谢!

【问题讨论】:

编写自己的 mex 函数? 稀疏代码的计算核心不是已经用C写了吗?我不熟悉 Coder,但我怀疑它只会加速你自己的迭代代码。它不会加快对内置 MATLAB 代码的调用。 您也可以只为您的 MATLAB 代码部分生成 MEX 代码,这些代码不使用稀疏来加速这些部分。 【参考方案1】:

eigen library可以用来处理Matlab函数sparse,它是c语言的。

正如“libill”所说,您也可以只为您的 MATLAB 代码部分生成 MEX 代码,这些代码不使用稀疏来加速这些部分。

对于稀疏部分使用上述库。

【讨论】:

【参考方案2】:

我对 Matlab 编码器的理解可能是错误的,但我认为它是一种将您的 Matlab 代码转换为 C/C++ 代码的工具。我不确定性能优化是 Matlab 编码器的目标。

看看suitesparse。它是一个处理大量稀疏操作的 C 库。稀疏矩阵情况下的Matlab“\”运算符实际上使用suitesparse。所以我认为你修改 Matlab 生成的 C 代码可能更容易。

HTH

【讨论】:

【参考方案3】:

我只是不确定转换是什么意思。我假设您的意思是编写自己的 mex 函数。 稀疏包通常以不同的方式处理稀疏矩阵,Matlab 也有其独特的处理方式。 然而,他们大多使用 CSC(或 CSR)格式。 Matlab 也将矩阵保存为 CSC 格式。

您可以查看许多稀疏包的 mex 函数以了解它是如何完成的。 关键是 Matlab 不会让您在其稀疏数据结构中保存显式零。 不要尝试在 Matlab mex 函数上保存显式零。 Matlab 会让你窒息!

【讨论】:

以上是关于MATLAB Coder:稀疏矩阵的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 稀疏矩阵

matlab稀疏矩阵

Matlab关于稀疏矩阵的问题

图像去噪基于matlab稀疏表示KSVD图像去噪含Matlab源码 2016期

MATLAB 表达式“Mf”的稀疏度不正确

方程组稀疏矩阵索引的MATLAB存储器管理