7

独自の Matlab MEX ファイルを使用して、いくつかのシミュレーション結果を Matlab にインポートしています (もちろんソース コードはありません!)。Matlab とのインターフェイスは、Matlab 構造体を返す単一の関数があるため、実際には非常に単純です。Matlab を使用せずに、Python から直接 MEX ファイルでこの関数を呼び出す方法があるかどうかを知りたいですか?

私が念頭に置いているのは、たとえば SWIG のようなものを使用して、C 関数を Python にインポートし、その周りにカスタム Matlab-wrapper を提供することです...ちなみに、scipy.io.loadmat を使用すると、既に読み取りが可能であることを知っていますMatlab バイナリ *.mat データ ファイルですが、mat ファイルのデータ表現が Matlab の内部表現と同じかどうかはわかりません (その場合、MEX ラッパーに役立つ可能性があります)。

もちろん、システムに Matlab がインストールされていなくても、MEX で提供される関数を使用できるようにすることが考えられます。

ありがとう。

4

4 に答える 4

2

http://www.mathworks.com/help/toolbox/compiler/mbuild.htmlなど、Matlab コードからスタンドアロンの共有ライブラリを作成できます。これらは Python から呼び出すことができるはずです。ただし、Matlab Compiler が必要ですが、無料で利用できる試用版があるようです。

このstackoverflowトピックも参照してください。

于 2011-08-12T17:23:52.543 に答える
2

Matlab の仕組みや質問について誤解していない限り、それが可能になる可能性は非常に低いです。技術的な観点からは、ソリューションは完全で、バイナリ互換性があり、バグにはバグがあり、Matlab C ライブラリの機能を再実装するための機能 (mxGetPr、mxGetN などを実装する) である必要がありますが、Python にバインドされています。

私自身の回答を編集して、次のように述べさせてください。MATLABライセンスを利用できる場合は、必要なことの少なくとも一部を実行する優れたパッケージMLABラップがあります。

于 2011-07-27T18:10:38.593 に答える
1

mex 関数は、Matlab (つまり、matlab プログラム) が c/c++ で記述された関数を呼び出せるようにする API です。この関数は、Matlab 独自の内部関数を呼び出すことができます。そのため、関数 mex は Matlab ライブラリに対してリンクされます。したがって、Matlab ライブラリを使用せずに Python プログラムから mex 関数を直接呼び出すことは不可能に見えます (そして、その点では意味がありません)。

考慮すべきことは、そもそも mex 関数が作成された理由です。非 matlab c ライブラリ (または c コード) を matlab ユーザーが利用できるようにするためでしたか、それとも matlab ユーザーが利用できるようにしつつ、独自の matlab コードを非表示にするためでしたか? 最初のケースの場合は、mex 関数の所有者に、別の c または python プログラムに含めることができる非 mex 動的 lib 形式で提供するように要求できます。mex 関数が Matlab の内部関数に依存しない場合、これは簡単なはずです。

上記の他の人はmatlabコンパイラについて言及しています...はい、Matlab Compilerを使用してそのようなバイナリを生成する場合、mex関数をunixから呼び出し可能なスタンドアロンバイナリに含めることができます(したがって、pythonからですが、unix呼び出しとして)。これには、バイナリを Matlab のランタイム環境と共に展開する必要があります。これは、Python から直接関数を呼び出すこととまったく同じではありません。たとえば、戻り値はありません。

于 2012-06-23T22:40:18.673 に答える
1
  1. Mauroが指摘したように、mexファイルからライブラリを構築できます
  2. scipy.io.loadmat を安全に使用できます。データ表現は次のとおりです。

から:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html

戻り値 :

mat_dict : 辞書

変数名をキーとし、読み込まれた行列を値とする辞書

読み込まれた行列は、保存したとおりです。つまり、データ表現は一貫している必要があります。

于 2011-12-02T01:16:45.463 に答える