当前位置:  开发笔记 > 编程语言 > 正文

scipy.interp2d警告和离网大错误

如何解决《scipy.interp2d警告和离网大错误》经验,为你挑选了0个好方法。

我正在尝试对二维函数进行插值,并且通过scipy.interpolate.interp2d遇到了我认为怪异的行为。我不明白问题是什么,我很乐意提供帮助或提示。

import numpy as np
from scipy.interpolate import interp2d

x = np.arange(10)
y = np.arange(20)
xx, yy = np.meshgrid(x, y, indexing = 'ij')
val = xx + yy
f = interp2d(xx, yy, val, kind = 'linear')

运行此代码时,出现以下警告:

scipy / interpolate / fitpack.py:981:RuntimeWarning:由于B样条系数的数量已经超过数据点m的数量,因此无法添加更多的结。可能的原因:s或m太小。(fp> s)kx,ky = 1,1 nx,ny = 18,15 m = 200 fp = 0.000000 s = 0.000000
warnings.warn(RuntimeWarning(_iermess2 [ierm] [0] + _mess))

我不明白为什么interp2d告诉我它应该进行线性插值,为什么会使用任何样条曲线。当我继续并在网格上评估f时,一切都很好:

>>> f(1,1)
array([ 2.])

当我脱离网格对其进行评估时,即使该函数显然是线性的,也会出现很大的错误。

>>> f(1.1,1)
array([ 2.44361975])

我有点困惑,我不确定是什么问题。有人遇到过类似的问题吗?我以前使用过matlab,这几乎是我在那做1:1的方式,但是也许我做错了。

当我使用矩形网格(即y = np.arange(10))时,一切都可以正常工作,但这不是我所需要的。当我使用三次插值而不是线性插值时,误差变小(由于函数是线性的,所以也没有太大意义),但误差仍然很大。

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有