2013-02-20 34 views
0

我試圖從C++中取出一個矩陣,並將它導入到Matlab中,在這個矩陣上運行bintprog,稱之爲m。我的C++代碼生成這些特定類型的矩陣,並且我需要快速運行bintprog,並且理想地使用數百萬個矩陣。將矩陣從C++移動到Matlab

因此,以下任何一項都會很棒: 一種一次導入一組矩陣的方法,因此我可以通過Matlab代碼運行很多迭代。 或 如果我可以在C++中很好地實現Matlab代碼。

如果這不清楚留下我的評論,我會盡我所能。

+0

你可以從C++調用Matlab - http://www.mathworks.co.uk/help/matlab/calling-matlab-engine-from-cc-and-fortran-programs.html – 2013-02-20 17:02:51

回答

1

您還可以從C++代碼(反之亦然)Matlab的命令:

  1. 編譯你的C++代碼爲mex功能和使用mexCallMatlab調用bintprog

  2. 正如Mark建議的那樣,您可以使用matlab engine從本機C++代碼調用Matlab引擎。

  3. 您可以將您的C++代碼編譯爲共享庫,並使用calllib從Matlab中調用它。

+0

我看了在#2,並看到包括engine.h,但我不知道該文件可能在哪裏?任何知識?我正在OSX 10.7上運行此操作 – KevinShaffer 2013-02-20 19:34:55

+0

@KevinShaffer不是在'matlabroot/extern/include'中嗎? – Shai 2013-02-20 19:51:02

+0

這是,我剛剛找到它,但是當我嘗試包含它時,我收到一個錯誤,說該文件不存在。 這是它所在的目錄,其中應用程序位於我的驅動器上,名爲「Solid State」 /Applications/MATLAB_R2012a/extern/include/engine.h 因此,我已經輸入了這個類型 #include「/ Applications/MATLAB_R2012a/extern/include/engine.h「 我也嘗試過和沒有各種各樣的東西,但沒有用。 由於MATLAB_R2012a是一個應用程序,它如何改變? – KevinShaffer 2013-02-20 23:06:42

1

我建議簡單的解決方案,假設你的矩陣保持在3 dimmensional陣列:

構建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 

我認爲它的工作原理,它的處理時間不是問題!