爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9949|回复: 2

[源代码] 插值方法

[复制链接]

新浪微博达人勋

发表于 2018-6-21 14:48:17 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我用python读取了cmorph数据,cmorph数据是0.25*0.25,我想要进行插值成为0.1*0.1的数据,但是总是报错,求大神能否告知错误如何解决。

#!/usr/lib64/python2.6/
#! -*- coding: UTF-8 -*-

import numpy as np  
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import pylab
from scipy import linspace, polyval, polyfit, sqrt, stats
from pylab import *
from mpl_toolkits.basemap import Basemap, cm
import math
import netCDF4 as nc
from netCDF4 import Dataset
from netCDF4 import num2date
from scipy.interpolate import griddata
from functools import partial
import struct
from scipy import interpolate
from scipy.interpolate import griddata
file_name=‘/data/dailypre/bld/2001/CMORPH_V1.0BETA_BLD_0.25deg-DLY_EOD_20010602'
fopen = open(file_name, 'rb')
pre = np.zeros((720,1440))
i=0
with open(file_name,'rb') as fd:
    byte_len = 4
    records = iter(partial(fopen.read, 4), b'')   
    for r in records:
        j=i//1440   
        k=i%1440        
        precipitation = struct.unpack('<f',r)
        pre[j][k]=precipitation[0]
        i=i+1
    fopen.close()

我用的是interpolate.interpn
x = np.arange(-89.875,90.125, 0.25)#原本cmorph数据是-89.875~89.875,但是由于arange会不录取最后一个89.875,所以我直接改成了90.125,这样能把89.875录进去,以下数字都是这个原因
y = np.arange(0.125,360.125, 0.25)
x2 = np.arange(-89.875,89.885, 0.01)
y2 = np.arange(0.125,359.885, 0.01)
#yi2,xi2=np.meshgrid(y,x);
grid_z0 = interpolate.interpn((x,y), pre, (x2,y2), method='linear', fill_value=-999.0)
报错内容是:
    grid_z0 = interpolate.interpn((x,y), pre, (x2,y2), method='linear', fill_value=-999.0)
  File "/wind1/home/17liuysh/anaconda2/lib/python2.7/site-packages/scipy/interpolate/interpolate.py", line 2568, in interpn
    xi = _ndim_coords_from_arrays(xi, ndim=len(grid))
  File "interpnd.pyx", line 154, in scipy.interpolate.interpnd._ndim_coords_from_arrays
  File "interpnd.pyx", line 165, in scipy.interpolate.interpnd._ndim_coords_from_arrays
  File "/wind1/home/17liuysh/anaconda2/lib/python2.7/site-packages/numpy/lib/stride_tricks.py", line 249, in broadcast_arrays
    shape = _broadcast_shape(*args)
  File "/wind1/home/17liuysh/anaconda2/lib/python2.7/site-packages/numpy/lib/stride_tricks.py", line 184, in _broadcast_shape
    b = np.broadcast(*args[:32])
ValueError: shape mismatch: objects cannot be broadcast to a single shape


密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-21 19:57:07 | 显示全部楼层
basemap里面有interp方法,可以尝试下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-1-4 00:19:32 | 显示全部楼层
请问楼主解决了吗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表