gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:40:26 26 4
gpt4 key购买 nike

我用 scipy.optimize curve_fit 编写了一些代码。它在我的电脑上完美运行:

Windows 7 家庭高级版,带有 Service Pack 1,64 位戴尔工作室 1558英特尔酷睿 i3 CPU M330@2.13GHz 2.13GHz,3.86 GB RAMPython 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 位(英特尔)]Ipython 1.0.dev

而且合身度真的很差。我的代码相当长,但我准备了一个包含示例,可以重现所有情况。

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

我什至在 Windows 7 32 位(我 friend 的机器)上使用 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]

合适的图片: https://docs.google.com/file/d/0B6GA05-W4ZzzdTIxa3U3Rl92MU0/edit?usp=sharing

图像不合适 https://docs.google.com/file/d/0B6GA05-W4ZzzRlk4eWlER01WejQ/edit?usp=sharing

最佳答案

好的,问题出在当前 scipy 附加的优化库上。

当我从 EPD 7.3-2 附加文件中复制 _minpack.pydminpack.py 并替换当前的 _minpack.pyd 时和 minpack.py 文件完美契合。

我会向 scipy 报告该错误。

关于python - scipy.optimize curve_fit 返回错误值(取决于机器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com