爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8364|回复: 4

[其他] 将二维数组(时间,格点数)按照时间维升序排列

[复制链接]
发表于 2014-11-26 14:53:42 | 显示全部楼层 |阅读模式

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

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

x
准备将二维数组(时间,格点数),按照时间维升序排列,利用得到的结果与排序前相差很大,还望各位大神指点.已完成部分如下:
load "$NCARG_ROOt/lib/ncarg/nclscripts/csm/gsn_code.ncl"  
load "$NCARG_ROOt/lib/ncarg/nclscripts/csm/gsn_csm.ncl"     
begin                        
all_files = systemfunc ("ls /home/chenyg/ncl/air.*.nc")

fall      = addfiles (all_files, "r")   
ListSetType (fall, "join")
T  = fall[:]->air
tt =  T(:,0:89,{20:30},{120:130})
delete(T)

n0= dimsizes(tt(:,0,0,0))
n1= dimsizes(tt(0,:,0,0))
n2= dimsizes(tt(0,0,:,0))
n3= dimsizes(tt(0,0,0,:))
n4= n0*n1
s1 = new((/ n4,n2,n3 /),float)
  
do ll=0,n2-1
do nn=0,n3-1
    kk=0
do ii=0, n0-1
do jj = 0, n1-1
    s1(kk,ll,nn) = tt(ii,jj,ll,nn)
    kk=kk+1
end do
end do
end do
end do

delete(tt)
delete(n0)
delete(n1)
delete(kk)
;*****
xx = onedtond(ndtooned(s1),(/n4-1,(n2-1)*(n3-1)/))
print(xx(1:2,1:2))
yy = dim_pqsort_n(xx,1,0)
print(yy(1:2,1:2))
;******
system("rm -f t2.nc")
fout = addfile("t2.nc" ,"c")
fout->yy  = (/yy/)
                  
end

输出结果如下
Variable: xx (subsection)
Type: float
Total Size: 16 bytes
            4 values
Number of Dimensions: 2
Dimensions and sizes: [2] x [2]
Coordinates:
Number Of Attributes: 1
  _FillValue : 32766
(0,0) -18802
(0,1) -18777
(1,0) -18322
(1,1) -19025

Variable: yy (subsection)
Type: integer
Total Size: 16 byte
            4 values
Number of Dimensions: 2
Dimensions and sizes: [2] x [2]
Coordinates:
(0,0) 151
(0,1) 158
(1,0) 160
(1,1) 137

排列后数据类型变为整形,且排列前后相差很大,不知错在哪里,还望指点。
密码修改失败请联系微信:mofangbao
发表于 2014-11-26 21:16:37 来自手机 | 显示全部楼层
本帖最后由 longlivehj 于 2014-11-26 21:18 编辑

dim_pqsort_n返回的就是整形,看看帮助。另外看一下reshape函数,可以简化代码。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-11-27 08:18:51 | 显示全部楼层
longlivehj 发表于 2014-11-26 21:16
dim_pqsort_n返回的就是整形,看看帮助。另外看一下reshape函数,可以简化代码。

恩,谢谢啦。还请教一下,对于float类型的数据把数据按照升序排列有其他函数吗?
密码修改失败请联系微信:mofangbao
发表于 2014-11-27 09:15:08 | 显示全部楼层
tiantianyixin 发表于 2014-11-27 08:18
恩,谢谢啦。还请教一下,对于float类型的数据把数据按照升序排列有其他函数吗?

楼主误会了。不是说dim_pqsort_n不能处理float。函数的第二个参数,可能楼主只注意了升序降序,没有注意还有是否对原数组进行操作。
楼主将以下两句
yy = dim_pqsort_n(xx,1,0)
print(yy(1:2,1:2))
改为
yy = dim_pqsort_n(xx,2,0)
print(xx(1:2,1:2))
然后看看结果。

dim_pqsort_n的返回值(代码中的yy变量)始终是排序后的下标,所以始终是整数。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-11-27 09:43:11 | 显示全部楼层
longlivehj 发表于 2014-11-27 09:15
楼主误会了。不是说dim_pqsort_n不能处理float。函数的第二个参数,可能楼主只注意了升序降序,没有注意 ...

嗯,是这样的,多谢大神指点呀,多谢多谢!!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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