Python-scipy.interp2d引发有关结的运行时警告

时间:2019-07-12 22:20:22

标签: python scipy interpolation

我正在尝试使用scipy.interp2d使用Python 2.7基于我拥有的数据集构建插值函数。但是,每当我运行Python时,它都会不断抛出该警告:

/usr/lib/python2.7/dist-packages/scipy/interpolate/_fitpack_impl.py:975: RuntimeWarning: No more knots can be added because the additional knot would
coincide with an old one. Probable cause: s too small or too large
a weight to an inaccurate data point. (fp>s)
    kx,ky=1,1 nx,ny=18,4 m=106 fp=1355.885984 s=0.000000
  warnings.warn(RuntimeWarning(_iermess2[ierm][0] + _mess))

如果我使用三次或三次而不是线性,则会出现类似的警告。

数据本身看起来像这样:

x y z
400	0.1	24.5525361598
500	0.1	30.3102509102
700	0.1	36.9604444013
800	0.1	38.8662807180
900	0.1	40.2185588452
1000	0.1	41.2610946000
...

1300	1	50.7991409954
1400	1	50.7991411538
1500	1	50.7991416176
1600	1	50.7991433783
....
1100	10	51.3296099771
1200	10	51.3296099928
1300	10	51.3296100395
1400	10	51.3296101921
1500	10	51.3296108783
1600	10	51.3296145611
...
2500	100	52.2442339828
2600	100	52.3526243978
2700	100	52.4918053348
2800	100	52.6511782816

我在其他地方读过,这可能是scipy.interp2d中的错误-如果是这样,有什么解决方法吗?如果是我的数据有问题,该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:1)

错误消息指出s太小或重量太大。您尝试过更大的s吗?该文档说:

s : float, optional
    A non-negative smoothing factor.  If weights correspond
    to the inverse of the standard-deviation of the errors in z,
    then a good s-value should be found in the range
    ``(m-sqrt(2*m),m+sqrt(2*m))`` where m=len(x). 

在scipy文档的底部,它说

  

内插器由bisplrep构建,具有平滑因子   为0。如果需要进一步控制平滑,则应该使用bisplrep   直接使用。

然后使用bisplev进行插值:bisplev(xs, ys, tck, ...),其中xs,ys是插值的坐标,tck是bisplrep的输出。