- 积分
- 35948
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-7-26
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 Aires 于 2015-8-20 17:09 编辑
如果你是初学者,并且你想用Matlab处理大气海洋的数据,那么相信这个帖子会对你有很大帮助。
数据是以矩阵的形式排放,如四维数据矩阵(空间三维+时间一维)。Matlab对矩阵操作十分强大,而且很方便,有很多的函数可以很快的对矩阵进行你想要的操作。如:对矩阵的转置(一个 ' 就可以实现)。
1. reshape
reshape是对一个矩阵进行重新整形。
举个例子:
一个SST数据是360*180*360(经度*纬度*月)的矩阵,我想把最后一维的360个月变为12*30,这表示12个月*30年。因为之后经常求SST距平,这样分开可以方便的求距平。可以这样写:
sst=reshape(sst,[360 180 12 30]);
这样的sst就是四维的矩阵了,当然数据的大小是不能变的,否则会报错。
如果我们想求逐月的距平,上面这样处理的好处就体现出来了:
sst_mean=mean(sst,4) % 这是求sst逐月的气候态
sst_anom=zeros(360,180,12,30); % 预先生成sst距平的矩阵
for i=1:30
sst_anom(:,:,:,i)=sst(:,:,:,i)-sst_mean; % 循环求出sst距平
end
2. flipud, fliplr
这两个函数是对矩阵进行左右翻转(fliplr)和上下翻转(flipud)。
举例:
a=
1 2 3
4 5 6
fliplr(a)=
3 2 1
6 5 4
flipud(a)=
4 5 6
1 2 3
由于数据的格式往往不是我们想要的,我们会经常对矩阵做转置('),上下翻转,左右翻转等,变成我们想要的顺序。这两个函数可以方便的做到这一点,而不需要做循环。
3. is开头的函数,如:isnan。
isnan:如果元素是NaN,则结果是真(逻辑值=1)。
也就是说当一个矩阵a,里面的元素有一些是nan时,isnan(a)会返回一个和a同样大小的逻辑矩阵,矩阵中等于1的位置表示是nan,0的位置不是nan。
我们有时会对资料矩阵中的nan设置为其他的数,这时如果用其他的函数(比如。。。==nan)是做不到的,好的方法是用isnan。
比如:sst矩阵中有nan,想将nan的位置替换为-999。程序如下:
sst(isnan(sst))=-999;
一条代码就可以了。
4. squeeze
举例来说:如果一个矩阵SST是360*180*1*30,用squeeze函数就可以将第三维的1去掉,即
sst=squeeze(sst); % 此时sst矩阵大小为:360*180*30
这可以很方便的将没用的一维去掉。
经常我们用mean将某一维平均后会有*1*存在,这时就可以用squeeze。
注意:如果mean数据的最后一维,这个1会自动去掉。
比如:sst:360*180*12*30,
mean(sst,4); % 得到的sst是360*180*12,最后一维的1会自动去掉的,所以不用squeeze掉。
如果大家有自己觉得常用的矩阵操作函数,也麻烦在下面留言,一块和大家分享~
该帖中的函数会不断更新~
|
评分
-
查看全部评分
|