2016-06-29 7 views
0

私はむしろcomlicated matlab関数を持っています(これは、外部最適化スイート(cplexまたはgurobi)を呼び出すシミュレーションを呼び出します)。 MATLAB関数とMatlabから呼び出されたPython関数は、同じ設定をしていますが、他のものでは(正解は〜4500です)pythonは時々0.015 ...または162381を返します。パターンまたは相関をスポットする。Pythonで呼び出されたMATLAB関数からの奇妙な結果

私の推測は、int/float/double変数の変換、または何らかの形のメモリの問題のいずれかになります。結果はCPLEXからまっすぐに来るので、私はそれがなぜ変わるのかちょっと混乱します。

私は配列の構造体を含む構造体を返すと、それはPythonカーネルを殺します。それはPythonからのデバッグを少し難しくしました(私はpymatbridgeとmetakernelをインストールしました)

誰もがpythonで信頼性の低いmatlab関数の問題を抱えていましたか?解決策以外のアイデアは、コンソールからmatlabを実行し、結果ファイルを読む?

答えて

0

したがって、いくつかの変数がdoubleとして指定されていない場合はコードが実行され、それ以外の場合は整数除算またはそうでない場合は結果がfalseになります。私はこれが本当にすべきではないので、入力とどのように関連しているのか分かりませんが、関連するコードセクションのすべての変数を倍にして固定しました。従って

tl; dr:実行しても、すべての変数を倍にして問題を解決するだけです。

本当に何かのMathworks社は、これはあなたのケースで役立つ場合、私は考えていないが、あなたはすでにそれを認識していないのであれば、あなたはHTTPを見てみたいことがあり、そのPythonのAPI

+0

に修正する必要があります/ /stackoverflow.com/questions/183853/in-python-what-is-the-difference-between-and-when-used-for-division。特に、 'from __future__ import division'を使用すると、Python> = 2.2(あなたのコードではおそらくこのMathworksパッケージにない)のような問題を防ぐことができます。 – rkersh

+0

私はすでに '__future__ import division'を使っていますが、これは問題を引き起こすと思われます。 MATLABのdouble()のすべての変数をplasterするだけで問題は解決されました。ただし、MATLABで実行された場合、変数はすべて2倍になり、コードはPythonで実行されました。 MATLABがこれを内部的に扱うのは疑わしいです。これはPythonインタフェースの問題を引き起こします。私がそれを再現できるようになると、私は例を掲示し、必要に応じてバグレポートを提出するでしょう。 –

関連する問題