How to set an indexed value in a matrix based on a

2019-07-18 03:13发布

问题:

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?

回答1:

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)).



回答2:

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