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

how to take out specific month from data

Asked by varunesh on 4 Apr 2014
Latest activity Edited by Andrei Bobrov on 21 Apr 2014

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

Image Analyst on 20 Apr 2014

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!

varunesh

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

varunesh on 5 Apr 2014

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

varunesh on 5 Apr 2014

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

Andrei Bobrov on 21 Apr 2014

Please see my code befor word 'add'

Andrei Bobrov

Contact us