【问题标题】:dfitpack.error: (m>k) failed for hidden m: fpcurf0:m=1dfitpack.error: (m>k) 隐藏 m 失败: fpcurf0:m=1
【发布时间】:2015-04-18 04:57:33
【问题描述】:

我的代码在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

我梳理了源代码,但无法从中脱颖而出。

这个错误是什么意思?

【问题讨论】:

    标签: python scipy


    【解决方案1】:

    我认为有几件事可能会导致问题。

    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())
      

      很危险,因为您无法保证它们的顺序相同或正确。如果您想将 xval 与 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 的列表,而不是使用字典。

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

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 1970-01-01
      • 2013-02-21
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2018-07-18
      相关资源
      最近更新 更多