dfitpack.error: (m>k) 失败,隐藏 m: fpcurf0:m=1

1 投票
1 回答
5267 浏览
提问于 2025-04-17 12:44

我的代码可以在这里找到,因为我在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

有几个地方可能会导致问题。

  1. d1 = d2 = {}

    这行代码并不是创建两个独立的字典,而是只创建了一个字典,d1和d2这两个名字都指向同一个字典。正确的写法应该是 d1 = {}d2 = {}

  2. 这些代码在每次循环时都会清空字典:

        d1 = {part[0] : xval}
        d2 = {part[0] : yval}
    

    如果想要在字典中添加内容,应该改成:

        d1[part[0]] = xval
        d2[part[0]] = yval
    

    而且你可能还需要把键转换成浮点数,以确保它们能正确排序。

  3. 最后,字典是没有顺序的,所以这一行

    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的列表,而不是使用字典。

你看到的特定错误信息基本上是在说数据点不足以匹配节点的数量,这很合理,因为由于第二个错误,它只得到了一个数据点。

撰写回答