我在研究代码中使用scipy/numpy,而不是matlab。但是我经常遇到一个问题。虽然我找到了一种解决方案,但我希望能够寻找到更好的做法和解决方案。想象一下某些数学优化:
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)
但有时我需要进一步了解并需要多个返回值。如果我简单地附加多个返回值,则必须修改其他代码并解压缩第一个返回值。这是我比较喜欢Matlab而非Scipy的几种情况之一。 在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来检查结果。
但是我也可以从一开始就采用面向对象的方法,或者使用pdb,或者使用其他ipython魔法。