MATLAB Answers

0

how to take out specific month from data

Asked by varunesh on 4 Apr 2014
Latest activity Edited by Walter Roberson
on 28 Aug 2015

sir i have 95 year daily model output rainfall data form 2006-1-1 to 2100-1-1.i want to take out nov to feb from every year lear all;close all;clear global;

   load prec_GFDL_CM3_rcp26.mat X1 Y1 prec_all_years;
  %load prec_GFDL_CM3_rcp85.mat X1 Y1 prec_all_years;
% the data is for 95 years;
% here i am selecting the data from may to oct only i.e. 184 data points every year;
xx = [];
for i = 1:95;
if i==1
xx = [xx (i-1)*[1:59]];
elseif i == 95;
   xx = [xx (i-1)*[11339:11400]];
else
 xx = [xx (i-1)*365+[305:424]];
end
end
prec_all_years1 = 86400*prec_all_years; % the rainfall is converted to mm/day
prec_nov_feb = prec_all_years1(:,:,xx);
% daily maximum rainfall over India
[mm nn tt]=size( prec_all_years1);
for jj = 1:tt;
yy = prec_all_years1(:,:,jj);
max_rainfall(jj) = max(yy(:));
end

this is not work properly

please help me .Thank you!

  1 Comment

Original question in case vanuesh deletes it:

sir i have 95 year daily model output rainfall data form 2006-1-1 to 2100-1-1.i want to take out nov to feb from every year lear all;close all;clear global;

 load prec_GFDL_CM3_rcp26.mat X1 Y1 prec_all_years;
%load prec_GFDL_CM3_rcp85.mat X1 Y1 prec_all_years;

% the data is for 95 years;

% here i am selecting the data from may to oct only i.e. 184 data points every year;

xx = []; for i = 1:95; if i==1

xx = [xx (i-1)*[1:59]];

elseif i == 95;

 xx = [xx (i-1)*[11339:11400]];

else xx = [xx (i-1)*365+[305:424]];

end

end prec_all_years1 = 86400*prec_all_years; % the rainfall is converted to mm/day

prec_nov_feb = prec_all_years1(:,:,xx);

% daily maximum rainfall over India

[mm nn tt]=size( prec_all_years1);

for jj = 1:tt;

yy = prec_all_years1(:,:,jj); max_rainfall(jj) = max(yy(:)); end

this is not work properly please help me .Thank you!

Log in to comment.

Tags

No tags are associated with this question.

Products

No products are associated with this question.

1 Answer

Answer by Andrei Bobrov
on 4 Apr 2014
Edited by Andrei Bobrov
on 21 Apr 2014
 Accepted Answer

Let the 'a' is date for first frame of your 3D matrix (eg 'prec_all_years')

a = [2006,1,1];
[m,n,k] = size(prec_all_years1);
dten = datenum([2006 1 1 ;2100 1 1])
[~,M] = datevec(datenum(a) + (0:k-1)');
xx = ismember(M,[11 12 1 2]);
p = prec_all_years1(:,:,xx);
max_rainfall = max(reshape(p,m*n,[]));

add

[m,n,k] = size(prec_all_years1);
ii = cumsum(eomday(2014,1:12));
x0 = rem(0:k-1,365)+1;
xx_logic = x0 <= ii(2) | x0 > ii(10);
p = prec_all_years1(:,:,xx_logic);
max_rainfall = max(reshape(p,m*n,[]));

  10 Comments

Andrei Bobrov sir if this will be include leap years then what will be change or add in this code ? thank you.

Andrei Bobrov sir if this will be include leap years then what will be change or add in this code ? thank you.

Please see my code befor word 'add'

Log in to comment.


Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!