爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 19108|回复: 8

[其他] 请教几个用NCl生成nc文件的问题

[复制链接]

新浪微博达人勋

发表于 2014-5-15 08:33:57 | 显示全部楼层 |阅读模式

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

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

x
站点    年份     月    降水    等级
57544 2000     1     0.09   0
57544 2000     2    -0.77   2
57544 2000     3    -0.62   2
57544 2000     4    -0.56   1
57544 2000     5    -0.19   0
57544 2000     6    -0.16   0
57544 2000     7     0.18   0
57544 2000     8     0.01   0
57544 2000     9     3.89   0
57544 2000    10     0.76   0
57544 2000    11    -0.31   0
57544 2000    12    -0.40   1
57544 2001     1    -0.63   2
57544 2001     2    -0.64   2
57544 2001     3    -0.20   0
57544 2001     4    -0.40   0
57544 2001     5    -0.39   0
57544 2001     6    -0.12   0
57544 2001     7     0.31   0
57544 2001     8    -0.53   1
57544 2001     9    -0.78   2
57544 2001    10     0.36   0
57544 2001    11    -0.56   1
57544 2001    12    -0.66   2
      各位大神,请教几个问题,刚接触nc文件,对其存储的方式不了解,小子不才,请教几个比较简单但是让我很困惑的问题,望各位勿讥讽。
问题是这样的,现在准备用NCL将站点的月降水距平及等级数据处理成nc数据,但是各站点所包含的年份并不一致,这里该怎么处理,是不是可以将年份设置为统一的一段,然后没有该年份的数据用缺省值来替代?然后,希望哪位能稍微跟我讲解一下在保存nc文件时是怎么保持数据跟原文件的数据一一对应的。谢谢各位了。
下边是我生成nc的NCL脚本,不知道存在哪些问题,请各位批评指正。
;定义维
sta_id=new(stations_count,float)  ;stations_count为站点数目
lon=new(stations_count,float)
lat=new(stations_count,float)
year=ispan(2000,2004,1)
month=ispan(1,12,1)
P_anomaly=new((/stations_count,stations_count,stations_count,time_count,12/),float)
sta_id=stations(:,0)
lon=stations(:,2)
lat=stations(:,1)
P_anomaly!0="sta_id"
P_anomaly!1="lon"
P_anomaly!2="lat"
P_anomaly!3="year"
P_anomaly!4="month"

do i=0,stations_count-1
start_in_data_new=row_data_new(i,0)        ;在原数据文件中该站点第一条数据所在行数
end_in_data_new=row_data_new(i,1)   ;在原数据文件中该站点最后一条数据所在行数
rows=start_in_data_new-end_in_data_new
nyears=row_data_new(i,3)-row_data_new(i,2)+1  ;该站点有多少年的数据
        do j=0,nyears-1
          do k=0,11
            m=start_in_data_new+12*j+k     ;数据在data_new的下   
                P_anomaly(i,i,i,j,k)=pa(m,3)
          end do
        end do
end do
system("rm -f Pa.nc")
fout= addfile("Pa.nc","c")
setfileoption(fout,"DefineMode",True)
fAtt        = True
fAtt@title  = "The monthly anomaly of precipitation and itsdegree"
fileattdef(fout,fAtt)
dimNames=(/"sta_id","lon","lat","year","month"/)
dimSizes=(/stations_count,stations_count,stations_count,-1,12/)
dimUnlim  =  (/False,False,False,True,False/)
filedimdef(fout,dimNames,dimSizes,dimUnlim)
fout->sta_id =sta_id
fout->lon = lon
fout->lat = lat
fout->year =year
fout->month =month

fout->P_anomaly = P_anomaly

最后ncdump查看生成的nc文件是这样的,泪崩啊。┭┮﹏┭┮


无标题.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 08:41:44 | 显示全部楼层
小小谢很有才!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 09:00:31 | 显示全部楼层
对站点数据来说,能把id、lat和lon作为数据的维么?year和month倒是可以的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-15 09:11:06 | 显示全部楼层
longlivehj 发表于 2014-5-15 09:00
对站点数据来说,能把id、lat和lon作为数据的维么?year和month倒是可以的。

我就是想着把id、lat和lon都一块加进去,不知道该怎么弄。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 09:14:38 | 显示全部楼层
zpxie 发表于 2014-5-15 09:11
我就是想着把id、lat和lon都一块加进去,不知道该怎么弄。。

建议:每个站点单独存为nc文件,文件名用id;lat和lon作为nc文件的global属性存入文件。
另外,你说的对时间跨度不一致问题的解决方法是可行的,我本人也是这么做的,会发现这样处理后用ncl读取是很方便的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-15 09:23:03 | 显示全部楼层
longlivehj 发表于 2014-5-15 09:14
建议:每个站点单独存为nc文件,文件名用id;lat和lon作为nc文件的global属性存入文件。
另外,你说的对 ...

好的 非常感谢。我去试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-12 17:40:19 | 显示全部楼层
楼主可以分享一下最后的脚本么?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-24 20:37:19 | 显示全部楼层
bubuzbuzhidaozayang
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-2 19:43:59 | 显示全部楼层
遇到了相同的问题
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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