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

时间:2012-02-10 03:57:20

标签: python scipy

我的代码可用here,因为当我尝试在此处发布时,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 个答案:

答案 0 :(得分: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())
    

    是危险的,因为您无法保证他们将采用相同的顺序或正确的顺序。如果您想要将yvals与yval进行样条化,则需要类似

    的内容
    keys = sorted(d1)
    xs = [d1[k] for k in keys]
    ys = [d2[k] for k in keys]
    t = interpolate.UnivariateSpline(xs, ys)
    

    但我可能只是累积了xs和ys的列表,而不是使用字典。

  4. 您看到的特定错误消息基本上是说没有足够的数据点来匹配结的数量,这是有道理的,因为它只是因为错误#2而得到一个数据点。