# Compare two matrices of different dimensions

조회 수: 51(최근 30일)
Jonathan 2019년 4월 17일
댓글: Walter Roberson 2021년 6월 30일
I have two matrices A=500000*4 and B=4300000*4.
Matrix A = id, plus 3 columns of NaN.
Matrix B = id, lat, lon, elev.
I would like to find the id values in A = B, and based on those same id values, fill matrix A with the missing lat,lon,elev.
The code I have is:
for i=1:length(A)
ind = B(:,1)==A(i,1);
A(i,2:4) = B(ind,2:4);
clear ind
end
This works but is extremely slow. How can I do this more efficiently?
Thanks
Jon

댓글을 달려면 로그인하십시오.

### 채택된 답변

Jonathan 2019년 4월 17일
I fiddled around with this further and addressed the loop, which was re-doing the "find" and settled on this...
C=A(:,1);
D=B(:,1);
idx=find(ismember(C,D));
A(:,2)=B(idx,2);
A(:,3)=B(idx,3);
A(:,4)=B(idx,4);
seems to work.
##### 댓글 수: 5표시숨기기 이전 댓글 수: 4
Walter Roberson 2021년 6월 30일
Two fixed columns? Or any two columns? If it is any two columns, then is D guaranteed to be non-decreasing along the rows? What is the desired output?
And to confirm, C and D are 2D and C and D have the same number of rows but not necessarily the same number of columns?
Or is C a column vector with the same number of entries that D has rows and the task is to find out which column the value is in relative to the content of that row of D?
Is there some pattern to the way D is arranged?

댓글을 달려면 로그인하십시오.

### 추가 답변(1개)

darova 2019년 4월 17일
ind = B(:,1)==A(i,1); % array of 5000000x1 logical
Try:
for i=1:length(A)
ind = find(B(:,1)==A(i,1),1,'first'); % one value
A(i,2:4) = B(ind,2:4);
% clear ind
end
##### 댓글 수: 1표시숨기기 없음
darova 2019년 4월 17일
Are those numbers you compare of integer format?

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

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

Start Hunting!

Translated by