爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 27276|回复: 7

[作图] 关于多维数组中条件操作的循环简化问题

[复制链接]
发表于 2020-5-16 09:14:59 | 显示全部楼层 |阅读模式
10金钱
本人NCL菜鸟一只,最近在计算阻高指数,现在的问题是:在判断瞬时阻塞(IB)之后,得到一个由0和1组成的(time,lat,lon)三维数组,大小是IB(90,19,144),现在要判断某个格点连续15个经度出现瞬时阻塞,既认为产生大尺度阻塞(LSB),并将另一个三维数组LSB(90,19,144)中的该格点判定为1,根据以上思路,我写出了如下的代码:

;计算大尺度阻塞
LSB=new((/90,19,144/),float)
LSB(:,:,:)=0
do t=0,89
   do x=0,18
      do y=3,140
          LSB(t,x,y)=where((sum(IB(t,x,y-3:y+3)).eq.7),1,0)  
      end do
    end do
end do



但是总感觉这样的循环嵌套太多层,会影响运算速度,想请问各位大佬有没有更加简化的方法来完成多维数组的条件操作?

密码修改失败请联系微信:mofangbao
 成长值: 0
发表于 2020-5-16 10:05:58 | 显示全部楼层
我觉得这样就可以了。因为NCL是解释型语言,所以本身计算就慢。如果你想要加快计算速度,可以用Matlab把数据处理好,再用NCL绘图。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2020-11-2 14:47:30 | 显示全部楼层
{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2021-4-25 10:54:46 | 显示全部楼层
你好!我想请问一下,我想对空间上的所有格点,如果该值大于16就要减去16,如果小于则+8.但是我感觉我算出来是有问题 的,可以帮忙看看怎么处理吗?
BH=new((/41,49/),integer)
copy_VarCoords(BLH(0,:,:),BH)

do i=0,40
        do j=0,48
        BH(i,j)=where((BX1(i,j)>16),BX1(i,j)-16,BX1(i,j)+8)
        end do
end do

这样搞出来循环里面有很多的负值,就不知道是怎么回事
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2021-7-1 15:29:03 | 显示全部楼层
本帖最后由 wsx 于 2021-7-6 09:36 编辑

请问后面还有个持续5天的程序能分享吗?
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

 楼主| 发表于 2021-7-24 11:22:52 | 显示全部楼层
wsx 发表于 2021-7-1 15:29
请问后面还有个持续5天的程序能分享吗?

你好,请看我这篇帖子
http://bbs.06climate.com/forum.p ... d=100201&extra=
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

发表于 2021-7-24 20:03:10 | 显示全部楼层
605765455 发表于 2021-7-24 11:22
你好,请看我这篇帖子
http://bbs.06climate.com/forum.php?mod=viewthread&tid=100201&extra=

请问,您计算出来阻塞事件会比瞬时阻塞明显偏少吗?我算出来最大值区域小了3%到5%
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

 楼主| 发表于 2021-7-25 17:16:52 | 显示全部楼层
wsx 发表于 2021-7-24 20:03
请问,您计算出来阻塞事件会比瞬时阻塞明显偏少吗?我算出来最大值区域小了3%到5%

会的,因为还有范围和持续时间的限制,所以阻塞事件一定是比瞬时阻塞少的
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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