我目前正在做一个 C++ 项目,我实际上对使用 Matlab 数据结构感兴趣,而不必创建自己的数据类型(如矩阵、数组等)
有没有办法在 C++ 中无缝使用 Matlab 对象?我不介意在我的程序运行时在后台运行 Matlab。
编辑:起点是: http: //www.mathworks.co.uk/help/matlab/calling-matlab-engine-from-cc-and-fortran-programs.html。我会继续阅读这篇文章。
我目前正在做一个 C++ 项目,我实际上对使用 Matlab 数据结构感兴趣,而不必创建自己的数据类型(如矩阵、数组等)
有没有办法在 C++ 中无缝使用 Matlab 对象?我不介意在我的程序运行时在后台运行 Matlab。
编辑:起点是: http: //www.mathworks.co.uk/help/matlab/calling-matlab-engine-from-cc-and-fortran-programs.html。我会继续阅读这篇文章。
您可以改用 Armadillo C++ 数学库;被 NASA、波音、西门子、德意志银行、麻省理工学院、CMU、斯坦福大学等使用。
如果您更熟悉 MATLAB/OCTAVE http://arma.sourceforge.net/docs.html#syntax ,他们有很好的文档和示例
我更喜欢使用某种原生 C++ 库而不是 Matlab。对于开发和执行而言,这可能会更快。
通过为 Matlab 编写 C++ 扩展,我学到了一件事:在 C++ 中使用 Matlab 对象可能会让您非常头疼。
Matlab 数据结构不作为 C++ 类公开。相反,您会获得可以使用类 C API 函数操作的指针。
我建议使用本机 C++ 库,例如Eigen3。
您正在查看的功能并不是真正打算用作无缝对象。在过去,当我使用它时,我发现使用原生数组或第三方矩阵库来做 C 部分要简单得多,然后将其转换为 Matlab 矩阵以返回。
混合 Matlab 和 C++ 通常通过以下两种方式之一完成:
有一个 C++ 程序调用 Matlab 来做一些专门的处理。这主要用于复杂矩阵算法的快速开发。您可以通过调用完整的 Matlab 引擎来做到这一点,或者将您的 Matlab 代码片段打包到一个共享库中进行分发。(分布式版本打包了 Matlab 运行时的可分发副本,该副本与您的脚本一起调用)。
让 Matlab 脚本调用 C++ 函数来进行一些专业处理。这通常用于嵌入算法的 C++ 实现(例如机器学习模型)或处理特定的优化。
这两个用例在向/从 Matlab 传输数据时都会产生一些开销。
如果您只是在寻找一些要在 C++ 中使用的矩阵代码,那么最好查看各种 C++ 矩阵库,例如在Boost中实现的那个。