Python scipy.optimize curve_fit返回错误值(取决于机器)

Python scipy.optimize curve_fit返回错误值(取决于机器),python,scipy,curve-fitting,Python,Scipy,Curve Fitting,我用scipy.optimize curve\u fit编写了一些代码。它在我的电脑上工作得非常好: Windows 7 Home Premium和Service Pack 164位 戴尔工作室1558 英特尔酷睿i3处理器M330@2.13GHz2.13GHz,3.86GB内存 Python 2.7.3(默认值,2012年4月10日,23:24:47)[MSC v.1500 64位(AMD64)] IPython 0.13.1 然后我将脚本移动到另一台机器(COMP2): Microsoft

我用scipy.optimize curve\u fit编写了一些代码。它在我的电脑上工作得非常好:

Windows 7 Home Premium和Service Pack 164位 戴尔工作室1558 英特尔酷睿i3处理器M330@2.13GHz2.13GHz,3.86GB内存 Python 2.7.3(默认值,2012年4月10日,23:24:47)[MSC v.1500 64位(AMD64)] IPython 0.13.1

然后我将脚本移动到另一台机器(COMP2): Microsoft Windows XP专业版2002 Service Pack 3,AMD Athlon(tm)II X4 620 处理器2.61 GHz,3.25 GB RAM,物理地址扩展 Python 2.7.5 | 32位(默认值,2013年6月14日,18:15:12)[MSC v.1500 32位(英特尔)] ipython1.0.dev

而且合身真的很糟糕。我的代码相当长,但我准备了一个自我包含的示例,它再现了所有情况

我读到,当扩展数据和ydata是数组(,dtype=float)时,有时会有帮助,但这不是我的情况(我尝试过)

我甚至在Windows 7 32位(我的firends’s机器)上用Python 2.7.3 32位尝试了这段代码,它工作了-所以我不知道为什么拟合结果如此不可预测,以及我如何强制这段代码在使用COMP2的计算机上正常工作。

下面是一个自我包含的示例:

from string import*
from numpy import *
from matplotlib.pylab import *
from scipy.optimize import curve_fit
from sys import exit

nm_range=[574.14200000000005, 574.154, 574.16499999999996, 574.17700000000002, 574.18799999999999, 574.19899999999996, 574.21100000000001, 574.22199999999998, 574.23400000000004, 574.245]
data_for_fit=[859.0, 997.0, 1699.0, 2604.0, 2013.0, 1964.0, 2435.0, 1550.0, 949.0, 841.0]
guess=[574.1861428571428, 574.2155714285715, 1302.0, 1302.0, 0.0035019999999983615, 859.0]

def f_double_gauss(x,x0,x1,A0,A1,sigma,c):
        return A0*exp(-(x-x0)**2/(2.*sigma**2)) + A1*exp(-(x-x1)**2/(2.*sigma**2)) + c

popt,pcov=curve_fit(f_double_gauss,nm_range,data_for_fit,guess,maxfev=10000)

print guess
print popt

fig=figure("If fit of gauss or double gauss is good")
ax=fig.add_subplot(1,1,1)
pdata,=plot(nm_range,data_for_fit,"bo-")
guessed=[]
for i in nm_range:
    guessed.append(f_double_gauss(i,guess[0],guess[1],guess[2],guess[3],guess[4],guess[5]))


pfit,=plot(nm_range,f_double_gauss(nm_range,popt[0],popt[1],popt[2],popt[3],popt[4],popt[5]),"k-")
pguess,=plot(nm_range,guessed,"y")
ax.set_title("Anizo fit"+" : data, init guess & fit")
ax.set_xlabel("wavelenght [nm]")
ax.set_ylabel("PL intensity")
legend([pdata,pguess,pfit],["data","guess","fit"])
show()
不匹配的输出:

[574.1861428571428,574.2155714285715,1302,1302.0,0.0035019999999983615,859.0]
[5.69174152e+02 8.66516577e+04  -9.27629569e+04 1.59887720e+09  7.56288801e-03  1.59110000e+03]
良好配合的输出:

[574.1861428571428,574.2155714285715,1302,1302.0,0.0035019999999983615,859.0]
[ 5.74177150e+02    5.74209188e+02  1.74187044e+03  1.58646166e+03  1.0068462e-02   8.57450661e+02]
合身形象:

不合适的图像

好的,问题在于连接到当前scipy的优化库

当我从EPD 7.3-2附带的文件中复制\u minpack.pydminpack.py时,将当前的\u minpack.pydminpack.py文件替换为\n minpack.py文件,这两个文件非常适合


我将向scipy报告该错误。

我曾尝试在Windows 7 32位上使用Enthound canopy-1.0.3-win-32.msi运行此脚本,但仍然无法运行。我重新安装了Python for:Python-2.7.5 numpy-MKL-1.7.1.win32-py2.7 scipy-0.12.0.win32-py2.7 matplotlib-1.2.1.1.win32-py2.7不起作用:(我在Windows 7上重新安装了Python 32位版本:Python-2.7.5.amd64.msi matplotlib-1.2.1.win-amd64-py2.7 numpy-MKL-1.7.1.win-amd64-py2.7 fit仍然不好scipy-0.12.0.win-amd64-py2.7我尝试将所有数据乘以因子1e6、1e9和1e16,但fit仍然不好。我在Mac上运行了这段代码,anaconda 1.6.1用于64位操作系统,fit失败了。我是对此我不确定,但我认为optimize.leastsq方法有问题。我在Windows 7 64位机器上安装了Anaconda 1.6.2 64位和2.7.5(AMD64)python,该机器采用Intel Core i5-3470和16GB RAM,但适合性仍然很差。