matlab の代わりに研究コードに scipy/numpy を使用しています。1つの欠陥があります。私は頻繁に遭遇していました。回避策を見つけましたが、ベスト プラクティスとより良い解決策を確認したいと考えています。いくつかの数学的最適化を想像してください:
def calculation (data, max_it=10000, tol = 1e-5):
k = 0
rmse = np.inf
while k < max_it and rmse > tol:
#calc and modify data - rmse becomes smaller in each iteration
k += 1
return data
それは正常に動作します。複数の場所でコードに埋め込みます。
import module
d = module.calculation (data)
しかし、詳細な洞察を確認したい場合があり、複数の戻り値が必要になることがあります。単純に複数の戻り値を追加すると、他のコードを変更して最初の戻り値をアンパックする必要があります。これは、scipy よりも matlab を好む数少ない状況の 1 つです。matlabでは、明示的に残りを要求しない限り、最初の戻り値のみが評価されます。
したがって、matlab のような (= 最適な) 複数の戻り値に対する私の回避策は、[モジュールの] グローバル変数です。
def calculation (data, max_it=10000, tol = 1e-5):
global k
global rmse
k = 0
rmse = np.inf
while k < max_it and rmse > tol:
#calc and modify data - rmse becomes smaller in each iteration
k += 1
return data
私の関数呼び出しは変更なしで機能し、ipython で何かを確認したい場合は、いくつかの変数グローバルreload(module)を設定し、 module.rmseで洞察を確認します。
しかし、最初からOOアプローチを想像したり、pdbを使用したり、他のipythonマジックを使用したりすることもできます