- no duplicate dates in A alone and in B alone.
- the dates in A and B shall be sorted and in the same order (ascending or descending). If not, the results will be incorrect. Un-comment the line to see the effect.
find where both matrices match
1 view (last 30 days)
Show older comments
Hi,
I have matrix A and matrix B. The first column in both of them is a dates column where few observations and A and B coincide. I have created a matrix C where the first column in C is the dates of A and I want to put in the matrix the observations of B where the dates match.
I tried x0=find(ismember(B(:,1),A(:,1))==1); but how can I find the rows in C where i need to put B(x0,2:end)?
0 Comments
Accepted Answer
Fangjun Jiang
on 4 Aug 2011
I am having a second thought. The first solution requires:
A=[1:10;1:10]';
B=[2:2:20;20:20:200]';
%B=B(end:-1:1,:);
C=nan(size(A));
C(:,1)=A(:,1);
IndexA=ismember(A(:,1),B(:,1));
IndexB=ismember(B(:,1),A(:,1));
C(IndexA,2)=B(IndexB,2);
A better solution is below. It still requires no duplicate dates which should be the case based on the task.
A=[1:10;1:10]';
B=[2:2:20;20:20:200]';
B=B(end:-1:1,:);
C=nan(size(A));
C(:,1)=A(:,1);
[Dummy,IndexA,IndexB]=intersect(A(:,1),B(:,1));
C(IndexA,2)=B(IndexB,2);
4 Comments
Fangjun Jiang
on 5 Aug 2011
Or could make it work this way.
[IndexA, locB] = ismember(A(:,1),B(:,1));
C(IndexA,2) = B(locB(IndexA),2);
Oleg Komarov
on 5 Aug 2011
The zeros! I always do ismember(A, subset of A), that's why I forgot about zeros, but of course this implies that one is a subset.
More Answers (0)
See Also
Categories
Find more on Time Series Objects in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!