dfitpack.error: (m>k) 失败,隐藏 m: fpcurf0:m=1
我的代码可以在这里找到,因为我在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
我仔细查看了源代码,但还是搞不清楚它的意思。
这个错误是什么意思呢?
1 个回答
5
有几个地方可能会导致问题。
d1 = d2 = {}
这行代码并不是创建两个独立的字典,而是只创建了一个字典,d1和d2这两个名字都指向同一个字典。正确的写法应该是
d1 = {}
和d2 = {}
。这些代码在每次循环时都会清空字典:
d1 = {part[0] : xval} d2 = {part[0] : yval}
如果想要在字典中添加内容,应该改成:
d1[part[0]] = xval d2[part[0]] = yval
而且你可能还需要把键转换成浮点数,以确保它们能正确排序。
最后,字典是没有顺序的,所以这一行
t = interpolate.UnivariateSpline(d1.values(), d2.values())
是有风险的,因为你不能保证它们会以相同的顺序出现,或者是正确的顺序。如果你想把x值和y值进行插值处理,你应该用类似于
keys = sorted(d1) xs = [d1[k] for k in keys] ys = [d2[k] for k in keys] t = interpolate.UnivariateSpline(xs, ys)
的方式,但我可能会直接累积一个x和y的列表,而不是使用字典。
你看到的特定错误信息基本上是在说数据点不足以匹配节点的数量,这很合理,因为由于第二个错误,它只得到了一个数据点。