【发布时间】:2015-06-27 02:23:53
【问题描述】:
我有一个网格天气数据集,其维度为 33 X 77 X 77。第一个维度是时间,休息时间分别是纬度和经度。我需要每次将数据插值(线性或最近邻)到不同的点(纬度和经度)并将其写入 csv 文件。我已经使用了 scipy 的 interp2d 函数,并且它在一个时间步骤中是成功的。由于我有很多地方,我不想随着时间的推移而循环。
下面显示的是我编写的一段代码,有人可以提出更好的方法来完成任务吗?
import sys ; import numpy as np ; import scipy as sp ; from scipy.interpolate import interp2d ;import datetime ; import time ; import pygrib as pg ;
grb_f=pg.open('20150331/gfs.20150331.grb2') lat=tmp[0].data(lat1=4,lat2=42,lon1=64,lon2=102)[1] ; lat=lat[:,0];
lon=tmp[0].data(lat1=4,lat2=42,lon1=64,lon2=102)[2] ; lon=lon[0,:] ;
temp=np.empty((0,lon.shape[0]))
for i in range(0,tmp.shape[0]):
dat=tmp[i].data(lat1=4,lat2=42,lon1=64,lon2=102)
temp=np.concatenate([temp,dat[0]-273.15],axis=0)
temp1=temp.reshape(tmp.shape[0],lat.shape[0],lon.shape[0])
x=77 ; y=28 #(many points)
f=interp2d(lon,lat, temp1[0,:,:],kind='linear',copy=False,bounds_error=True ) ; Z=f(x,y)
编辑::
我没有制作 3D 矩阵,而是将数据垂直添加并制作了大小为 2541 X 77 的数据矩阵以及大小为 2541 X 1 的 lat 和 lon。interp2d 函数给出了无效长度错误。
f=interp2d(lon,lat, temp1[0,:,:],kind='linear',copy=False,bounds_error=True )
“非矩形网格的输入 z 长度无效”)
ValueError:非矩形网格的输入 z 长度无效
我的 x,y,z 矩阵的长度相同 (2541,2541,2541)。那为什么它会抛出一个错误? 谁能解释一下?我们将非常感谢您的帮助。
【问题讨论】:
标签: python linear-interpolation