最近要用到EOF处理数据,根据魏凤英老师在《现代气候统计诊断与预测技术》中提出的那样:

变量场输入的三种形式决定了分析重点,关于变量的距平场和标准化场,ncl中给出了直接方便的处理方式,但是ncl中没有给出关于原始变量场这一项的选择,导致我在想研究其平均状况时受阻(这种情况不多)。所以打算用matlab来解决,翻看一些博主的文章,发现很多都已经给出了EOF函数,但是关于气象中缺测值的问题没有提(很可能是我看的太少),所以做点补充。

%model_bias等都是自己定义的数组,进行替换即可
%若EOF区域跨越的纬度较大,例如从30-70N,需要将model_bias乘以一个系数再进行EOF,以弥补极地面积减小的变化。
%经度,纬度,模式个数(时间维),季节时次;
%经度由小到大,纬度由小到大;
model_bias=zeros(192,144,46,5);
wgt = zeros(144);
pi   = atan(1.0)*4;
for i=1:144
wgt(i)  = sqrt(cosd( lat(i)*pi/180.0 ));
model_bias(:,i,:,:) = bias(:,i,:,:)*wgt(i);%192x144x46x5
end%因为气象数据时常有缺测,需要先剔除掉缺测数据,否则进行EOF计算会报错
tic;
num=0;
for l=1:192%经度时次
disp(l)
for k=1:144%纬度时次
disp(k)
if (ismember(1,isnan(model_bias(l,k,:,:)))==0)
num=num+1;%将二维数组转化为一维数组,便于计数
disp(num);
new_model_bias(num,:,:) = model_bias(l,k,:,:);
new_lon(num) = lon(l,1);
new_lat(num) = lat(k,1);
end
end
end
toc;%计时%原始数据
%原始数据处理维持原状
%计算距平数据,运行下一行
%new_model_bias=new_model_bias-mean(new_model_bias,2)%EOF计算
[v_ann,pc_ann,lambda_ann,rvc_ann]=fEOF(new_model_bias(:,:,1));
[v_mam,pc_mam,lambda_mam,rvc_mam]=fEOF(new_model_bias(:,:,2));
[v_jja,pc_jja,lambda_jja,rvc_jja]=fEOF(new_model_bias(:,:,3));
[v_son,pc_son,lambda_son,rvc_son]=fEOF(new_model_bias(:,:,4));
[v_djf,pc_djf,lambda_djf,rvc_djf]=fEOF(new_model_bias(:,:,5));%标准化时间序列;
pc_ann = zscore(pc_ann(1,:),0)%计算样本标准差
pc_mam = zscore(pc_mam(1,:),0)
pc_jja = zscore(pc_jja(1,:),0);
pc_son = zscore(pc_son(1,:),0);
pc_djf = zscore(pc_djf(1,:),0);%复原空间场
tic;
num=0;
for l=1:192%经度时次
disp(l)
for k=1:144%纬度时次
disp(k)
if (ismember(1,isnan(model_bias(l,k,:,:)))==0)
%将一维数组复原成空间场
num=num+1;
disp(num);
mode_ann(l,k) =v_ann(num,1);
mode_mam(l,k)= v_mam(num,1);
mode_jja(l,k)=v_jja(num,1);
mode_son(l,k)=v_son(num,1);
mode_djf(l,k)=v_djf(num,1);
else
mode_ann(l,k) =nan;
mode_mam(l,k)=nan;
mode_jja(l,k)=nan;
mode_son(l,k)=nan;
mode_djf(l,k)=nan;
end
end
end
toc;%计时%年和四季第一模态的方差贡献率
first_var(1,1)=rvc_ann(1,1);
first_var(1,2)=rvc_mam(1,1);
first_var(1,3)=rvc_jja(1,1);
first_var(1,4)=rvc_son(1,1);
first_var(1,5)=rvc_djf(1,1);%年和四季的第一模态的时间系数
first_pc(1,:)=pc_ann;
first_pc(2,:)=pc_mam;
first_pc(3,:)=pc_jja;
first_pc(4,:)=pc_son;
first_pc(5,:)=pc_djf;%年和四季的第一模态
first_mode(1,:,:)=mode_ann;
first_mode(2,:,:)=mode_mam;
first_mode(3,:,:)=mode_jja;
first_mode(4,:,:)=mode_son;
first_mode(5,:,:)=mode_djf;%这个函数是在网站上下载的,由 2019/5/3 Ke Li 编写,感谢!
function [v,pc,lambda,rvc]=fEOF(x)
% EOF analysis
% supposing the input data x has been standardized
% of course you can standardize the data by anomaly or std-anomaly
% it all depends on your study demand
% for time-space matrix,
% be sure the row denotes the spatial dimension and column for time
%
% return varibles:
% v: spatial mode or pattern for each column (eigenvector)
% pc: time factors for each row (principle component)
% lambda: eigenvalue
% rvc: the ratio of variance contribution
%
% 2019/5/3 editd by Ke Li[~,n]=size(x);% covariance matrix
c=x*x'/n;% eigenvalue and eigenvector
[v,e]=eig(c,'nobalance');   % c*v - v*e is much closer to 0, % so the 'nobalance' option produces more accurate results in this case.
lambda=diag(e);% inverse the result
v=fliplr(v);
lambda=flipud(lambda);% time factors (principle components)
pc=v'*x;% the ratio of variance contribution
rvc=lambda./sum(lambda);

这样子处理的话,我们只要在进行fEOF之前对数组进行不同形式的处理就可以得到我们想要的结果。令人疑惑的是,我用MATLAB进行的距平场EOF和ncl的距平场EOF,模态和时间系数都一致,但是方差贡献有些许差异,不知道是什么原因。

若有错误,感谢大家指正!

MATLAB EOF处理 缺测值问题相关推荐

  1. 匹配滤波(脉冲压缩) matlab代码,亲测可用

    匹配滤波(脉冲压缩) matlab代码,亲测可用 匹配滤波(matched filtering)是最佳滤波的一种,当输入信号具有某一特殊波形时,其输出信噪比达到最大. 匹配滤波器的相频特性和输入信号正 ...

  2. SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值

    SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值 执行事务代码ME21N 创建采购订单,输入了单据类型,供应商,组织结构相关的数据,账户分配类别指定为K.如下图, 当把item catego ...

  3. 定义进项税代码缺省值

    一.说明 本文是在SAP系统后台,维护指定公司代码的进项税缺省值,以便于在采购业务的发票校验操作中能够快速地指定税码.此项配置主要与发票校验有关(TCODE:MIRO). 此项配置有先决条件,公司代码 ...

  4. 绝不重新定义继承而来的缺省值参数

    绝不重新定义继承而来的缺省值参数 文章目录 绝不重新定义继承而来的缺省值参数 一.问题引入 二.结论 一.问题引入 在C++中,只能继承两种函数:虚(virtual)函数和非虚(non-virtual ...

  5. 14 PP配置-生产主数据-BOM相关-定义项目状态的缺省值

    业务背景:定义项目状态的缺省值 事务码:OS21 SPRO路径:SPRO->生产->基本数据->物料清单->常规数据->BOM 用途->定义项目状态的缺省值 第1步 ...

  6. 59 MM配置-后勤发票校验-维护税代码缺省值

    业务背景:维护税代码缺省值 事务码:SPRO SPRO路径:物料管理->后勤发票校验->收入发票->维护税代码缺省值 第1步,SPRO进入 第2步,设置默认的税码 配置完成! 202 ...

  7. 根据条件返回相应值 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)...

    1 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 2 [功能]根据条件返回相应值 3 [参数]c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或 ...

  8. python 缺省参数_week04_python函数缺省值

    默认值的作用域def foo(xyz=[]): xyz.append(10) print(xyz) foo()#[10] foo()#[10, 10] 为什么第二次调用foo函数打印的是[10, 10 ...

  9. 中南大学 科学计算与MATLAB语言 11矩阵求值

    中南大学 科学计算与MATLAB语言 11矩阵求值 矩阵求值主要包括 矩阵的行列式值 矩阵的秩 矩阵的迹 矩阵的范数 矩阵的条件数 把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称方阵所 ...

  10. 声明一个长方形类,属性有长和宽;操作有赋值、计算长方形的周长和面积、输出信息等,要求定义构造函数(缺省值为10)和析构函数。

    题目描述:声明一个长方形类,属性有长和宽:操作有赋值.计算长方形的周长和面积.输出信息等,要求定义构造函数(缺省值为10)和析构函数. 析构函数的作用:对象消亡时,自动被调用,用来释放对象占用的空间. ...

最新文章

  1. python家的杨辉三角
  2. mysql查看在线用户
  3. 我的第一个Github项目上线了
  4. php redis新增数据类型,Redis有哪几种数据类型
  5. 24.C#LINQ TO XML(十二章12.3)
  6. python之路——内置函数和匿名函数
  7. Linux 文件系统相关的命令
  8. Yaml spring boot 二维数组写法
  9. android 电脑 手柄游戏排行榜,适合手柄玩的安卓游戏推荐
  10. 决策树和CART决策树
  11. 删除IE浏览器JS缓存
  12. 百度云开发clouda学习(一)
  13. 大一新生HTML期末作业 个人网页王嘉尔明星介绍网页设计与制作
  14. Intro to RL Lecture1
  15. 点滴记录,与技术无关
  16. flv.js播放视频时遇到的问题
  17. 基于经典蓝牙的安卓蓝牙APP开发(基于蓝牙2.0开发,例:HC-05)
  18. shuffle洗牌算法java_洗牌算法shuffle
  19. EM现象出现的原因及解决办法
  20. 低版本IntelliJ IDEA升级到IntelliJ IDEA 2021.3.3

热门文章

  1. 4G知识总结(LTE网络架构、关键技术、物理层、移动性管理)
  2. Matlab2010b反复激活解决办法
  3. 风险管理计划包括哪些内容
  4. PMP第十一章:项目风险管理
  5. 2018药品目录匹配_本位码_众联社本位码匹配工具2018版破解版
  6. 产品经理面试技巧及常见问题
  7. 数据定义约束-数据库习题
  8. 论文阅读:基于Himawari-8 数据的日间海雾检测方法
  9. ResNet网络结构搭建
  10. windows10配置内外网IP切换bat脚本