Python:Bivariate Spline不在网格数据上
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:Bivariate Spline不在网格数据上,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1325字,纯文字阅读大概需要2分钟。
内容图文
![Python:Bivariate Spline不在网格数据上](/upload/InfoBanner/zyjiaocheng/723/7f3bc386f49e4125aaefb4bb79d3ef6f.jpg)
我有一个数据集(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样条/多项式拟合/非线性回归吗?
解决方法:
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
内容总结
以上是互联网集市为您收集整理的Python:Bivariate Spline不在网格数据上全部内容,希望文章能够帮你解决Python:Bivariate Spline不在网格数据上所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。