- 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 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Fangjun Jiang
2011-8-4
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 个评论
Fangjun Jiang
2011-8-5
Or could make it work this way.
[IndexA, locB] = ismember(A(:,1),B(:,1));
C(IndexA,2) = B(locB(IndexA),2);
Oleg Komarov
2011-8-5
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Time Series Objects 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!