How to get the highest values on a matrix depending on the values of another matrix

1 view (last 30 days)
I want to sort out the values of a matrix (A) depending on another independent matrix (B), and create a third matrix with the results (C). See the example:
A = [1 2 1; 4 1 3; 3 8 2]
B = [1 2 3; 4 5 6; 7 8 9]
C = [5 9 5; 4 5 7; 7 8 9]
Therefore, for the same elements on A, I want to find the highest elements on B. For instance, for values of 1, I want to loop through B until finding the highest value related, that in the example is 5. Then I want to pass all the values to a new matrix C.
I have tried with generating my own functions or using loop, but I found no solution after 4 days of trying this. Would appreciate some explanation if I am missing something or not understanding the properties of matrices in Matlab, I am quite used to Python and R, but in Matlab I am a newbie.
Thanks!

Accepted Answer

Stephen23
Stephen23 on 11 Sep 2015
Edited: Stephen23 on 11 Sep 2015
In just three lines, without any loops:
>> A = [1 2 1; 4 1 3; 3 8 2];
>> B = [1 2 3; 4 5 6; 7 8 9];
>> [~,~,X] = unique(A(:));
>> D = accumarray(X,B(:),[],@max);
>> C = reshape(D(X),size(A))
C =
5 9 5
4 5 7
7 8 9

More Answers (1)

Guillaume
Guillaume on 11 Sep 2015
A = [1 2 1; 4 1 3; 3 8 2];
B = [1 2 3; 4 5 6; 7 8 9];
assert(isequal(size(A), size(B)), 'matrix A and B have different size');
C = zeros(size(A)); %destination matrix
for ua = unique(A)' %iterate over the unique values of A
C(A == ua) = max(B(A == ua)); %for those value of A that are ua, update C with the max of B
end
  1 Comment
Victor Francisco Pajuelo Madrigal
Edited: Victor Francisco Pajuelo Madrigal on 11 Sep 2015
Thanks for the reply! The comments to the code were great to know what was going on! It worked for a small matrix but my dataset is very large (working with satellite images) and it takes a lot of CPU processing.

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!