How to replace data in a matrix by comparing from another matrix?
Show older comments
I have a matrix A,
[1 5
2 6
3 6
4 7
5 6]
and I have another matrix B as
[1 2
1 3
1 4
1 5
2 3
2 4
3 4
3 5
4 5]
now i want to compare B with a and i want to replace 2nd column of B with A data for example,
[1 5
1 5
1 5
1 5
2 6
2 6
3 6
3 6
4 7]
in first column when there is 1 it will take the value of matrix A's second column data as 5 and when first column is having 2 it will take the value of 2 from matrix A.
please please help me.
Accepted Answer
More Answers (2)
Andrei Bobrov
on 5 May 2015
Edited: Andrei Bobrov
on 5 May 2015
[lo,ii] = ismember(B(:,1),A(:,1));
out = B;
out(lo,2) = A(ii(lo),2);
3 Comments
Stephen23
on 5 May 2015
Very nice solution, although it took me a while to realize that l0 is a variable. it looks similar to the number 10, especially when it is being used as an index.
If the nomenclature is clearer then this solution is much easier to read:
>> [ism,idx] = ismember(B(:,1),A(:,1));
>> out = B;
>> out(ism,2) = A(idx(ism),2)
out =
1 5
1 5
1 5
1 5
2 6
2 6
3 6
3 6
4 7
Andrei Bobrov
on 5 May 2015
Hi Stephen! I corrected..
suchismita
on 5 May 2015
Nobel Mondal
on 5 May 2015
Assuming, the 'a' matrix has unique values in the first column
for bRow= 1:size(b, 1)
aRow = find(a(:,1)==b(bRow,1), 1);
if ~isempty(aRow)
b(thisrow,2) = a(aRow,2);
end
end
1 Comment
suchismita
on 5 May 2015
Categories
Find more on Resizing and Reshaping Matrices 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!