前言:最近在玩机器学习的项目,在jupyter notebook中的cell经常跳来跳去的运行,结果就发现有些数据本来表现得很漂亮的,结果同一个模型跑多几次反而全烂了,debug之后发现是python的指针问题
问题描述:传参执行了一个函数之后,发现原来的值不断在发生变化
解决:
python在处理变量的时候并不像其它语言那么严谨,特别是在ML中经常涉及对矩阵的操作,(注意即使在C中传入一个多维变量其实也是传入指针,因此,任何你以为的在函数里面的变量作用域都会被扩散到全局,所以反复被运用的值发生了本质的改变
更好的处理代码:
def inverse_result(result,target_scalers):
# 结果数据数据逆归一化
inver_res = np.zeros(result.shape)
for i, scaler in enumerate(target_scalers):
inver_res[:,i:i+1] = scalers[i].inverse_transform(result[:,i].reshape(-1,1))
return inver_res