【问题标题】:Moving matrix from c++ to Matlab将矩阵从 c++ 移动到 Matlab
【发布时间】:2013-02-20 16:40:40
【问题描述】:

我正在尝试从 c++ 中获取一个矩阵并将其导入 Matlab 以在该矩阵上运行 bintprog,将其称为 m。我的 c++ 代码生成了这些特定类型的矩阵,我需要在它们上快速运行 bintprog,最好使用数百万个矩阵。

因此,以下任何一项都会很棒: 一种一次导入一堆矩阵的方法,这样我就可以通过我的 Matlab 代码运行很多迭代。 或者 如果我能很好地用 C++ 实现 Matlab 代码。

如果不清楚,请留下我的 cmets,我会尽可能更新。

【问题讨论】:

标签: c++ matlab import matrix


【解决方案1】:

您可以从 C++ 代码调用 Matlab 命令(反之亦然):

  1. 将您的 C++ 代码编译成 mex 函数并使用 mexCallMatlab 调用 bintprog

  2. 按照 Mark 的建议,您可以使用 matlab engine 从本机 C++ 代码调用 Matlab 引擎。

  3. 您可以将 C++ 代码编译为共享库,并使用 calllib 从 Matlab 中调用它。

【讨论】:

  • 我查看了#2,并看到包含engine.h,但我不知道该文件可能在哪里?有什么知识吗?我在 OSX 10.7 上运行它
  • @KevinShaffer 不是在matlabroot/extern/include 吗?
  • 是的,我刚刚找到它,但是当我尝试包含它时,我收到一条错误消息,指出该文件不存在。这是它所在的目录,应用程序位于我的驱动器上,名为“Solid State”/Applications/MATLAB_R2012a/extern/include/engine.h 所以完整地我输入了这个#include“/Applications/MATLAB_R2012a/extern/include/ engine.h”我也尝试过各种事情,但无济于事。既然 MATLAB_R2012a 是一个应用程序,它会如何改变事情?
  • @KevinShaffer 您是否尝试使用-I将此文件夹添加到您的包含路径?
【解决方案2】:

我建议使用简单的解决方案,假设您的矩阵保存在 3 维数组中:

在 C++ 中构建一个循环,以保存您的矩阵...像这样:

ofstream arquivoOut0("myMatrices.dat");
  for(int m=0;m<numberMatrices;m++){ 
      for (int i=0; i< numberlines;i++){
           for(int j=0;j<numberColumns;j++)
               if(j!=numberColumns-1) arquivoOut0<< matrices[m][i][j] << "\t";
               else arquivoOut0<< matrices[m][i][j] << "\n";
           }
       }
  }
arquivoOut0.close();

好的。您已将矩阵保存在 ascii 文件中!现在你必须在 Matlab 中阅读它!

load myMatrices.dat

  for m=1:numberMatrices
      for i=1:numberLines
           for j=1:numberColumns
               myMatricesInMatlab(m,i,j)=myMatrices((m-1)*numberLines+i,j);
           end
       end
  end

现在,您可以使用所需的工具箱了:

for i=1:numberMatrices
    Apply the toolbox for myMatricesInMatlab(i,:,:);
end

我认为它有效,处理时间不是问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2010-11-08
    • 1970-01-01
    • 2013-01-02
    • 2015-02-04
    • 2013-11-18
    相关资源
    最近更新 更多