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

╄→尐↘猪︶ㄣ 提交于 2019-12-24 05:02:30

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!