爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5318|回复: 9

[程序设计] 求问:用matlab如何从三维数组中筛选出含有指定字符的数据?

[复制链接]

新浪微博达人勋

发表于 2020-2-12 16:51:46 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 mcallister 于 2020-2-28 14:31 编辑

在下面这样的三维数据中如何筛选出全部含有WP的数据?最好可以保存到新的变量中,先感谢各位老师!

数据说明如下:

usa_atcf_id     
           Size:       32x360x13334
           Dimensions: char32,date_time,storm
           Datatype:   char  
           Attributes:
                       long_name             = 'ATCF ID for the storm'   ATCF:
                       standard_name         = 'automated_tropical_cyclone_forecasting_system_storm_identifier'  
                       coverage_content_type = 'thematicClassification'

部分数据如下:

id(:,:,3299) =

SSSSSSSSSSSSSSSSSSSSSSSSS                                                                                                                                                                           
PPPPPPPPPPPPPPPPPPPPPPPPP                                                                                                                                                                           
0000000000000000000000000                                                                                                                                                                           
1111111111111111111111111                                                                                                                                                                           
2222222222222222222222222                                                                                                                                                                           
0000000000000000000000000                                                                                                                                                                           
1111111111111111111111111                                                                                                                                                                           
9999999999999999999999999                                                                                                                                                                                                                                                                                                                                               
id(:,:,3300) =

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW  
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP                                                                              
222222222222222222222222222222222222222222222222222222222222222222222222222                                                                                
999999999999999999999999999999999999999999999999999999999999999999999999999                                                                                
222222222222222222222222222222222222222222222222222222222222222222222222222                                                                                
000000000000000000000000000000000000000000000000000000000000000000000000000                                                                                
111111111111111111111111111111111111111111111111111111111111111111111111111                                                                                
999999999999999999999999999999999999999999999999999999999999999999999999999



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

新浪微博达人勋

 楼主| 发表于 2020-2-12 16:54:38 | 显示全部楼层
本帖最后由 mcallister 于 2020-2-14 11:26 编辑

数据中间是没有空行的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-2-12 18:15:39 | 显示全部楼层
自行help ncread
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-2-12 20:15:57 | 显示全部楼层
lonrange=[       ]
latrange=[        ]
i_inx=find(lon>=lonrange(1)&lon<=lonrange(2));
j_inx=find(lat>=latrange(1)&lat<=latrange(2));
nx=length(i_inx);
ny=length(j_inx);
nz=length(lev);
**find找到不为零的数的下标
**find([1 0 2 3])=1 3 4
u=ncread(filename,'u',[i_inx(1) j_inx(1) 1 2], [nx ny nz 1]);
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-13 00:13:37 | 显示全部楼层

谢谢,看过help了,就是不知道每个变量的 start,count,stride 该怎么设置
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-13 00:20:12 | 显示全部楼层
本帖最后由 mcallister 于 2020-2-13 00:21 编辑
zqzq 发表于 2020-2-12 20:15
lonrange=[       ]
latrange=[        ]
i_inx=find(lon>=lonrange(1)&lon=latrange(1)&lat

谢谢您,后几行代码还是不太明白,我的数据中好像没有lev的描述
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-13 16:49:55 | 显示全部楼层
用了NC文件常用命令里面的方法后报错,请问可以指点一下是什么原因吗?
代码:
lat=ncread('E:\data\IBTrACS.ALL.v04r00.nc','usa_lat');
lon=ncread('E:\data\IBTrACS.ALL.v04r00.nc','usa_lon');
a=find(lon>=100&lon<=180);
b=find(lat>=0&lat<=90);%a和b作为经纬度的指针
lon_num=length(a);
lat_num=length(b);
winddata=ncread('E:\data\IBTrACS.ALL.v04r00.nc','usa_wind',[a(1) b(1) ...],[lon_num lat_num ..]);
%读取特定经纬度的wind数据

报错:
winddata=ncread('E:\data\IBTrACS.ALL.v04r00.nc','usa_wind',[a(1) b(1) ...],[lon_num lat_num ..]);
               ↑
错误: 等号左侧的表达式不是用于赋值的有效目标。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-13 16:52:03 | 显示全部楼层
本帖最后由 mcallister 于 2020-2-14 11:27 编辑

帖子已编辑,上一个问题已解决
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-13 20:47:55 | 显示全部楼层
本帖最后由 mcallister 于 2020-2-17 17:49 编辑

问题已解决
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-2-15 16:34:10 | 显示全部楼层
本帖最后由 mcallister 于 2020-2-17 17:48 编辑

问题已解决
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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