mooviies
mooviies

Reputation: 45

How to set an indexed value in a matrix based on another matrix's values

Say I have a matrix A

A =
 0     1     2
 2     1     1
 3     1     2

and another matrix B

B =
 0    42
 1    24
 2    32
 3    12

I want to replace each value in A by the one associated to it in B.

I would obtain

A =
 42     24     32
 32     24     24
 12     24     32

How can I do that without loops?

Upvotes: 2

Views: 138

Answers (2)

Daniel
Daniel

Reputation: 36710

arrayfun(@(x)(B(find((x)==B(:,1)),2)),A)

Upvotes: 1

chappjc
chappjc

Reputation: 30579

There are several ways to accomplish this, but here is an short one:

[~,ind]=ismember(A,B(:,1));
Anew = reshape(B(ind,2),size(A))

If you can assume that the first column of B is always 0:size(B,1)-1, then it is easier, becoming just reshape(B(A+1,2),size(A)).

Upvotes: 6

Related Questions