Filter löschen
Filter löschen

Find the indices between two vectors of dates

8 Ansichten (letzte 30 Tage)
Pedro Cavaco
Pedro Cavaco am 5 Apr. 2011
Hi all,
I have two vectors of dates but they start at different periods and have different hour distributions.
The first vector is inside Matrix A and is even spaced by hour, this is:
A(1,1) = '03-Jan-1983 0:00:00';
A(2,1) = '03-Jan-1983 1:00:00';
A(3,1) = '03-Jan-1983 2:00:00';
A(4,1) = '03-Jan-1983 3:00:00';
...
A(10,1) = '03-Jan-1983 9:00:00';
...
A(end,1) = '01-Jan-2006 23:00:00';
The second vector is inside matrix B but is not even spaced in time.
B(1,1) = '19-Nov-1982 19:00:00';
B(2,1) = '19-Nov-1982 22:00:00';
B(3,1) = '20-Nov-1982 01:00:00';
B(4,1) = '20-Nov-1982 04:00:00';
...
B(end,1) = '31-Dec-2010 23:50:00';
In both matrices the date is just a reference to a value value in column 2.
What i want to do is to create a matrix C which will contain the evenly spaced dates from vector A(:,1) in the first column. The value with respect to that that date from vector A(:,2) and in the third column the value from the vector B(:,2).
C = zeros(length(A(:,1),3)
C = [A(:,1) A(:,2) B(indices,2)]
I want to find only the indices of the dates that match perfectly between the two vector of dates, if no match is found leaves a zero. After I just interpolate between these zeros to find the missing values.
I tried this script to find the indicies:
ind = zeros(length(A(:,1)),1);
for i=1:length(A)
ind(i) = find(datenum(B(:,1)) == datenum(A(i,1)));
end
But it returned this error:
??? Improper assignment with rectangular empty matrix.
Can anybody help????

Akzeptierte Antwort

Fangjun Jiang
Fangjun Jiang am 5 Apr. 2011
The following code works.
A(1,1) = datenum('03-Jan-1983 0:00:00');
A(2,1) = datenum('03-Jan-1983 1:00:00');
A(3,1) = datenum('03-Jan-1983 2:00:00');
A(4,1) = datenum('03-Jan-1983 3:00:00');
A(:,2)=[1:4]';
B(1,1) = datenum('03-Jan-1983 1:00:00');
B(2,1) = datenum('03-Jan-1983 3:00:00');
B(3,1) = datenum('03-Jan-1983 5:00:00');
B(4,1) = datenum('03-Jan-1983 7:00:00');
B(:,2)=[10:13]';
C = zeros(length(A(:,1)),3);
C(:,1:2)=A;
[TF,LOC]=ismember(A(:,1),B(:,1));
indices=LOC(TF);
C(TF,3)=B(indices,2);
C(:,2:3)

Weitere Antworten (0)

Kategorien

Mehr zu Time Series Objects finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by