python三维插值从规则网格到散点_插值三维数据(不规则垂直网格)到规则垂直网格。优化循环...

我正在处理一个3D领域。水平网格是不规则的,垂直网格也是不规则的,并且在水平网格中不同的节点(由于sigma垂直坐标)。在

我想在一个规则的垂直坐标上插值这些数据,现在我发现的唯一方法是循环每个水平点,然后做一个简单的1D垂直插值。这很容易实现(见下面的一个简单示例),但完全没有效率(在我的原始情况下,插入一个时间步长需要10分钟,我有超过10000个时间步来进行后处理)

#! /usr/bin/python

将numpy作为np导入

从scipy import interpolate## Horizontal mesh

x = range(0,300); y = range(0,200)

[X,Y] = np.meshgrid(x,y)

## Input

z1 = np.array([0.,5.,10.,20.,50.,100.,200.,500.,1000.])

Z_in = np.zeros((z1.shape[0],X.shape[0],X.shape[1]))

for i in range(0,X.shape[0]):

for j in range(0,X.shape[1]):

Z_in[:,i,j] = z1[:]

Z_in = Z_in+np.random.randint(-2,2,size=(z1.shape[0],X.shape[0],X.shape[1]))

var_in = np.random.randint(-10,10,size=(z1.shape[0],X.shape[0],X.shape[1]))

## Output

zout = np.array([0.,2.5,5.,7.5,10.,15.,20.,35.,50.,75.,100.,150.,200.,500.,1000.])

var_out = np.zeros((zout.shape[0],X.shape[0],X.shape[1]))

##Interpolation

for i in range(0,X.shape[0]):

for j in range(0,X.shape[1]):

var_out[:,i,j] = interpolate.interp1d(Z_in[:,i,j],var_in[:,i,j],bounds_error=False,fill_value=np.nan)(zout)

如果我的初始垂直网格在每个点上都是规则的,那么根据之前的文章,这将很容易(http://stackoverflow.com/questions/7755871/interpolating-a-3d-array-in-python-how-to-avoid-for-loops)但就我而言,我找不到一个简单的解决办法。我试着用一个映射函数:

^{pr2}$

但是我还是遇到了interp1d错误:“ValueError:x数组必须只有一个维度。”你知道有其他方法来实现这个吗?我执行错误了吗?我很乐意有其他的建议。在

提前谢谢你。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值