0

C ++からマトリックスを取得してMatlabにインポートして、このマトリックスでbintprogを実行しようとしています.m. 私の C++ コードは、これらの特定の型の行列を生成します。bintprog をそれらに対してすばやく実行する必要があり、理想的には数百万の行列を使用します。

したがって、次のいずれかが優れています。Matlab コードを使用して多くの反復を実行できるように、多数の行列を一度にインポートする方法。または、Matlab コードを C++ で適切に実装できれば。

これが明確でない場合は、コメントを残してください。できる限り更新します。

4

2 に答える 2

1

C++ コードから Matlab コマンドを呼び出すことができます (逆も同様です)。

  1. C++ コードを関数にコンパイルし、を使用しmexて呼び出します。bintprogmexCallMatlab

  2. Mark が提案したように、matlab engineを使用してネイティブ C++ コードから Matlab エンジンを呼び出すことができます。

  3. C++ コードを共有ライブラリとしてコンパイルし、 を使用して Matlab から呼び出すことができますcalllib

于 2013-02-20T17:53:07.947 に答える
1

行列が 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();

Ok。行列を 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

処理時間は問題ではありません。

于 2013-02-21T21:07:40.490 に答える