问题
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)
来源:https://stackoverflow.com/questions/19597737/how-to-set-an-indexed-value-in-a-matrix-based-on-another-matrixs-values