Finding the value of a variable for specific dates

I have a 2 column matrix (Matlab serial time, evapotranspiration(ETo)), each with the same number if rows. This matrix has over 4,000 rows, and I have about 200 specific dates that I need the ETo value for. I would like to filter out the ETo values with these specific dates, and then create a new 2 column matrix with these dates and ETo values.
I cannot find a command for this, any help would be greatly appreciated!

Answers (2)

You could use bsxfun to create a logical index and then use this index to select particular rows of the matrix:
M(X,:) % rows matching those dates
M(~X,:) % rows with different dates
Here is a simple example using two small vectors:
>> M = [99.6,100.2,100.7,102.1,104.9,105.2]; % dates in matrix
>> N = [100,105]; % dates to match
>> tol = 0.5;
>> X = any(abs(bsxfun(@minus,M,N(:)))<=tol,1)
X =
1 1 0 0 1 1
>> M(X)
ans =
99.600 100.200 104.900 105.200
>> M(~X)
ans =
100.70 102.10
Stephen's answer went above and beyond, and accounts for a tolerance on the dates. If that is not important, just use ismember to find the rows for the 200 dates you care about. Something like this:
>> X = [1 100; 2 200; 3 300; 4 400; 5 500]
X =
1 100
2 200
3 300
4 400
5 500
>> X(ismember(X(:,1),[2 4]),:)
ans =
2 200
4 400

Categories

Asked:

on 5 Nov 2015

Answered:

on 12 Nov 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!