find where both matrices match

1 vue (au cours des 30 derniers jours)
Danielle Leblanc
Danielle Leblanc le 4 Août 2011
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)?

Réponse acceptée

Fangjun Jiang
Fangjun Jiang le 4 Août 2011
I am having a second thought. The first solution requires:
  1. no duplicate dates in A alone and in B alone.
  2. 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.
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 commentaires
Fangjun Jiang
Fangjun Jiang le 5 Août 2011
Or could make it work this way.
[IndexA, locB] = ismember(A(:,1),B(:,1));
C(IndexA,2) = B(locB(IndexA),2);
Oleg Komarov
Oleg Komarov le 5 Août 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.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Time Series Objects dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by