前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中griddata的外插值_利用griddata进行二维插值

python中griddata的外插值_利用griddata进行二维插值

作者头像
全栈程序员站长
发布2022-09-01 15:37:11
3.4K0
发布2022-09-01 15:37:11
举报

大家好,又见面了,我是你们的朋友全栈君。

有时候会碰到这种情况:

实际问题可以抽象为 \(z = f(x, y)\) 的形式,而你只知道有限的点 \((x_i,y_i,z_i)\),你又需要局部的全数据,这时你就需要插值,一维的插值方法网上很多,不再赘述,这里仅介绍二维的插值法

这里主要利用 scipy.interpolate 包里 griddata 函数

griddata(points, values, xi, method=’linear’, fill_value=numpy.nan, rescale=False)

points:二维数组,第一维是已知点的数目,第二维是每一个点的 \(x,y\) 坐标

values:一维数组,和 points 的第一维长度一样,是每个坐标的对应 \(z\) 值

xi:需要插值的空间,一般用 numpy.mgrid 函数生成后传入

method:插值方法

nearest

linear

cubic

fill_value:无数据时填充数据

该方法返回的是和 xi 的 shape 一样的二维数组

【example】

import numpy as np

import matplotlib.pyplot a plt

from scipy.interpolate import griddata

points = np.random.rand(n, 2) # n是已知点个数

values = np.random.rand(n) # 对应没每个点的值

# 插值的目标

# 注意,这里和普通使用数组的维度、下标不一样,是因为如果可视化的话,imshow坐标轴和一般的不一样

x, y = np.mgrid[

end1:start1:step1 * 1j,

start2:end2:step2 * 1j]

# grid就是插值结果,你想要的到的区间的每个点数据都在这个grid矩阵里

grid = griddata(points, values, (x, y), method=”cubic”, fill_value=0)

# 这里通过imshow显示时,坐标思维要按照计算机的来,普通图片是2维数组

# x 是最终结果的第一维,下标是从上到下由零增加

# y 是最终结果的第二维,下标是从左到右由零增加

plt.subplot(1, 1, 1)

plt.title(“0°”)

plt.imshow(grid, cmap=’jet’) # contourf jet gray

plt.colorbar()

plt.show()

np.mgrid 函数每一个维度最后一个参数:

可以是实数中的整数,表示步长,此时不包括末尾数据(左闭右开)

可以是实部为零,虚部为整数的复数,这个数字表示该区间想要插值多少个点的数据(闭区间)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141383.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档