我的代码在这里可用,因为当我试图在这里发布时,Stack Overflow一直给我错误.
我的错误如下:
Traceback (most recent call last):
File "/tmp/DoubleIntegrate.py", line 30, in <module>
t = interpolate.UnivariateSpline(d1.values(), d2.values())
File "/Library/Python/2.7/site-packages/scipy-0.11.0.dev_1983db6_20120208-py2.7-macosx-10.7-x86_64.egg/scipy/interpolate/fitpack2.py", line 136, in __init__
xb=bbox[0],xe=bbox[1],s=s)
dfitpack.error: (m>k) failed for hidden m: fpcurf0:m=1
Run Code Online (Sandbox Code Playgroud)
我梳理了源代码并且无法从它的尾部开始.
这个错误是什么意思?
我认为有一些事情可能会导致问题.
d1 = d2 = {}
这不会产生两个单独的词典; 它会产生一个,而两个名称d1和d2都指向它.这应该是d1 = {}和d2 = {}.
这些行在每个循环迭代中将字典排除在外:
d1 = {part[0] : xval}
d2 = {part[0] : yval}
Run Code Online (Sandbox Code Playgroud)
为了添加到词典,这些应该是:
d1[part[0]] = xval
d2[part[0]] = yval
Run Code Online (Sandbox Code Playgroud)
你应该把钥匙转换成浮子,以确保我们可以正确订购它们.
最后,字典没有订单,所以行
t = interpolate.UnivariateSpline(d1.values(), d2.values())
Run Code Online (Sandbox Code Playgroud)
这是危险的,因为你不能保证他们会按照相同的顺序或正确的顺序.如果你想将xval与yval进行样条拟合,你需要类似的东西
keys = sorted(d1)
xs = [d1[k] for k in keys]
ys = [d2[k] for k in keys]
t = interpolate.UnivariateSpline(xs, ys)
Run Code Online (Sandbox Code Playgroud)
但我可能只是累积一个x和y的列表而不是使用字典.
您看到的特定错误消息基本上是说没有足够的数据点来匹配结的数量,这是有道理的,因为它只是由于错误#2而得到一个数据点.