关于函数scipy.optimize.minimize中args的ID,我有一个问题。
我以Nelder Mead方法为例进行了这样的测试(其他方法已经过测试并且问题相同):
print id(Args);
from scipy import optimize;
res = optimize.minimize(fun, x0, args=Args, method='Nelder-Mead', options={'initial_simplex':sim});
print 'res = ', res;
在fun.py中,我有:
def fun(x,* Args):
print id(Args)
return np.random.rand(1)[0]
我发现,在第一轮迭代中,Args的ID与其余各轮迭代不同。似乎该函数复制了args,但实际情况并非如此,因为args是不可变的元组。直接的结果是,如果我运行此优化的许多线程,内存中将有副本。
有人知道为什么会这样吗?有没有办法解决这个问题,并使用所有计算线程共享的相同Args,因此不会浪费内存用于此Args的副本?
谢谢, 卢克