【问题标题】:Transferring Matlab variables to C将 Matlab 变量转移到 C
【发布时间】:2012-01-16 18:21:54
【问题描述】:

我在一些 Matlab 代码中有一个非常大的数据结构,它是数组单元格的形式。我们想开发 C 代码来处理这些数据,但我需要一些方法来存储 Matlab 变量(我们在 Matlab 中生成)并在 C/C++ 程序中打开它。连接这两个程序以便传输数据的最简单方法是什么?

【问题讨论】:

    标签: c++ c matlab variables


    【解决方案1】:

    如果您只是偶尔将数据从 MATLAB 移动到 C,最简单的方法是将其写入二进制文件,然后从 C 文件中读取。这当然会使 C 代码完全独立于 MATLAB。

    如果您的数据结构只是常规数组的元胞数组,则不必那么混乱,例如

    a{1} = zeros(1,5);
    a{2} = zeros(1,4);
    

    您可以为每个单元格编写一个标题,然后将数据写入文件。在上述情况下,这将是:

    [length{1} data{1} length{2} data{2}]
    

    在上述情况下:

    5 0 0 0 0 0 4 0 0 0 0
    

    如果数组是二维的,您可以通过编写:行、列,然后是每个单元格的行优先顺序的数据来扩展它。

    这可能并不完全方便,但应该足够简单。您也可以将其保存为 .mat 文件并阅读,但我建议这样做。在 MATLAB 中以二进制格式更容易。

    如果您需要比文件更频繁地移动数据,还有其他选择,但我能想到的都以某种方式与 MATLAB 相关。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • C代码需要独立于Matlab。我们只使用 Matlab 来生成输入值。甚至像将它们打印到文件并使用 C 代码读取它们这样简单的事情也是一种选择,但由于它们是矩阵的大单元,这是一个丑陋的解决方案,我想知道是否有更好的方法。
      【解决方案3】:

      如果两个流程需要在其生命周期内连接,您有很多选择:

      • 编译 Matlab DLL。
      • 使用 Matlab 引擎。
      • 编译 MEX 文件(如前面提到的 @Oli)

      如果通讯离线(Matlab 关闭后,C++ 开始读取),那么你应该使用文件系统。尝试用 XML 格式化,这是公认的标准。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        • 2015-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多