Python:Bivariate Spline不在网格数据上

weixin_38056491 2019-09-12 12:13:21
我有一个数据集(X,Y) – > Z.因此,我想在Python中学习2D输入和输出Z之间的映射. 我知道底层函数不是线性的,因此我无法应用线性回归.由于输入数据只是2D,我想使用双变量样条.我实现了以下示例: import numpy from scipy import interpolate X = [1,2,1,2] Y = [1,2,2,1] Z = [1,2,1,2] Y = numpy.array(Y) X = numpy.array(X) Z = numpy.array(Z) tck = interpolate.bisplrep(X,Y,Z)#,kx=5,ky=2) print interpolate.bisplev(1.5,1.5,tck) 但是,上面的代码引发了以下错误: File "/usr/lib/python2.7/dist-packages/scipy/interpolate/fitpack.py", line 850, in bisplrep TypeError: m >= (kx+1)(ky+1) must hold 问题是二元样条的scipy implementation需要网格数据作为输入而不是输入序列的正常数组,例如X = [x1,x2,…]和Y = [y1,y2,…] .由于我可以使用的数据类型,我无法构建网格,因为输入数据不会定期分配. 如何使用不是网格的输入数据进行双变量样条曲线? 如果不可能,还有另一种方法可以在Python中进行2D样条/多项式拟合/非线性回归吗?
...全文
144 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38087753 2019-09-12
  • 打赏
  • 举报
回复
TypeError: m >= (kx+1)(ky+1) must hold 意味着您提供的点数太少,而不是数据必须是网格数据. m等于len(X)(或len(Y)或len(Z)).kx和ky控制样条的程度. 因此,例如,如果增加x,y和z的长度: import scipy.interpolate as interpolate x = [1,2,1,2,1,3,2,3,3] y = [1,2,2,1,3,1,3,2,3] z = [1,2,1,2,0,0,0,0,0] kx, ky = 2, 2 # spline order assert len(x) >= (kx+1)*(ky+1) tck = interpolate.bisplrep(x, y, z, kx=kx, ky=ky) print(interpolate.bisplev(1.5,1.5,tck)) 版画 2.109375

479

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧