議論のために、私は MWCellarray temp を持っているとしましょう:
MWCellArray temp = new MWCellArray(10000,11);
そして、Matlab 関数を呼び出して、いくつかの簡単な計算を実行したいと考えています。
MLApp.MLApp matlab = new MLApp.MLApp();
<THIS IS THE MISSING STEP>
matlab.Execute("open 'C:\Program Filez\mymatlabcode.m'");
matlab.Execute("[thisismyoutput] = mymatlabcode(temp)");
最初に temp を matlab ワークスペースに渡せるようにする必要があります。明らかに、私の最初の考えは次のとおりでした。
matlab.PutWorkspaceData("putworkspace", "base", temp);
しかしいいえ: {"実装されていません (HRESULT からの例外: 0x80004001 (E_NOTIMPL))"}
そのコマンドを使用するには、MWCellArray を文字列配列に変換する必要があるようです....
//{
// int[] kDimensions = temp.Dimensions;
// string[,] stemp = new string[kDimensions[0], kDimensions[1]];
// for (int i = 0; i < kDimensions[0]; i++)
// {
// for (int j = 0; j < kDimensions[1]; j++)
// {
// stemp [i, j] = (temp[i + 1, j + 1]).ToString();
// }
// }
//}
これは非常に遅いです。実際の実装は約 15 の MWCellArray であり、この変換には 15 ~ 20 分かかります。
そう。どうすればこれを賢明な方法で行うことができますか?転送を有効にする他の方法が見つかりません。matlab.PutCharArray も matlab.PutFullMatrix も適用できないようです。
ループを大幅に高速化する方法はありますか? 私はc#にまったく慣れていません
あるいは、MWCellArray を .mat ファイルとして C ドライブに保存してからロードできるはずだと思っていたでしょうか? (読み込みは簡単ですが、保存には困惑しています)
あなたが提供できる洞察に興味があります。ありがとう。