爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4031|回复: 9

求助王老师,求OMI数据臭氧各地区平均值 最大最小值的问题

[复制链接]

新浪微博达人勋

发表于 2017-5-8 12:47:42 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 一只萌新 于 2017-5-8 14:02 编辑

这是计算OMI卫星一个月份数据平均值最大最小值的程序,当当我改变使用的.shp文件,虽然输出的图像会变为相应的地区,但是输出的数据不会改变  求助该怎么更改




datadir = 'F:/OMI/one/'
st = datetime.datetime(2006,1,1)
et = datetime.datetime(2006,1,31)
vname = 'ColumnAmountO3'
ave = None
n = 0
while st <= et:
    fn = os.path.join(datadir, 'OMI-Aura_L3-OMTO3e_' + st.strftime('%Y%m%d') + '.he5')
    f = addfile(fn)
    v = f[vname]
    data = v[:,:]
    if ave is None:
        ave = data
    else:
        ave = ave + data
    n += 1
    st = st + datetime.timedelta(days=31)
data = ave / n
axesm()
lhuabei=shaperead('F:/MeteoInfo_Java_1.4.2_Files/MeteoInfo/map/china.shp')
geoshow(lhuabei, edgecolor='k')
layer = imshowm(data)
masklayer(lhuabei, [layer])
title('OMI - Mean'+ vname)
ave =data.ave()
max = data.max()
min = data.min()
point=data['25','100']
print 'Ave: %.2f, Min: %.2f, Max: %.2f,point: %.2f ' %(ave, min, max, point)
xlim(70,140)
ylim(18,50)
colorbar(layer)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-8 14:30:45 | 显示全部楼层
st = st + datetime.timedelta(days=31)
请问这条语句是什么意思,days=  应该使用什么数值
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-8 20:34:27 | 显示全部楼层
一只萌新 发表于 2017-5-8 14:30
st = st + datetime.timedelta(days=31)
请问这条语句是什么意思,days=  应该使用什么数值

时间增加某些天,days=1指的增加一天。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-9 12:22:10 | 显示全部楼层
本帖最后由 一只萌新 于 2017-5-9 12:25 编辑

谢谢老师的回复
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-9 12:24:49 | 显示全部楼层
MeteoInfo 发表于 2017-5-8 20:34
时间增加某些天,days=1指的增加一天。

谢谢老师,如果我想求一个月的平均,就设置30或31天就可以对吗?
还是第一个问题不知道怎么解决,我改变.shp文件,图像会变成对应的华北或者西北等地区,但输出的平均值 最大最小值不会改变,这是什么原因呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-9 12:52:27 | 显示全部楼层
一只萌新 发表于 2017-5-9 12:24
谢谢老师,如果我想求一个月的平均,就设置30或31天就可以对吗?
还是第一个问题不知道怎么解决,我改变 ...

参考这个帖子的12楼:http://bbs.06climate.com/forum.p ... p;extra=&page=2
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-9 19:44:22 | 显示全部楼层
MeteoInfo 发表于 2017-5-9 12:52
参考这个帖子的12楼:http://bbs.06climate.com/forum.php?mod=viewthread&tid=51688&extra=&page=2

老师我看过那个帖子,发现了我数据每次都一样的问题,
data = v[:,:]['32:55', '95:128']
是不是就是因为这一行,导致我每次提取的数据都是全部的数据?
那如果我想提取的是中国某片不规则的区域,与地图.shp相对应的同一片区域,该如何做呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-10 08:43:18 | 显示全部楼层
一只萌新 发表于 2017-5-9 19:44
老师我看过那个帖子,发现了我数据每次都一样的问题,
data = v[:,:]['32:55', '95:128']
是不是就是 ...

下面的语句就可以了。
data = v['32:55', '95:128]

循环里days=1,下次循环读取下一天的数据文件。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-5-10 22:56:51 | 显示全部楼层
MeteoInfo 发表于 2017-5-10 08:43
下面的语句就可以了。
data = v['32:55', '95:128]

老师  我计算一个月的平均 需要写成days=1吗?
如果这样写的话,不能输出数据
Ave: nan, Min: nan, Max: nan,point: nan
这是什么原因,是因为我电脑计算能力不行导致的吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-14 10:44:23 | 显示全部楼层
一只萌新 发表于 2017-5-10 22:56
老师  我计算一个月的平均 需要写成days=1吗?
如果这样写的话,不能输出数据
Ave: nan, Min: nan, Max ...

卫星数据会有很多缺测值,两个有缺测值的格点数据相加会使结果格点数据有跟多的缺测值,那么一个月的格点数据相加就可能全部是缺测值了。

这种情况可以不用加和再除以个数的方式,可以将每天的格点数据放在一个列表(list)中,然后用mean函数对列表中所有格点数据进行平均,对于某个固定位置的格点来说,如果31个数据中只有5个是有效值,那么将只对这5个数据进行平均得到平均值。这样就会避免缺测值过多的情况。如果是原来先加和再平均的方式,31个数据中有一个是缺测值那么计算结果也是缺测值。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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