如何将一个数组的值复制到另一个数组,其中第二个数组的索引等于第一个数组的值?

时间:2014-11-21 19:53:26

标签: matlab

如何在不使用for的情况下在一个matlab行中编写以下内容?

for i=1:5
    a(a==i) = b(i);
end

2 个答案:

答案 0 :(得分:1)

a是否仅由[1:5]中的值组成?您的问题标题表示您希望使用a的值作为b的索引。你可以直接这样做:

a = b(a);

答案 1 :(得分:0)

它有点混乱,但它有效,

a = randi(9,[5 5]);
i = 1 : 5;
b = [5 7 8 9 2];
[c,loc] = ismember(a,i);
loc = reshape(loc,1,[]);
loc(loc>0) = b(loc(loc>0));
loc = reshape(loc,size(c));
 a.* ~c +  loc .* c

例如,

aold =

 7     2     8     1     8
 9     1     9     3     3
 4     9     1     1     2
 2     8     8     5     1
 1     7     7     5     4


anew =

 7     7     8     5     8
 9     5     9     8     8
 9     9     5     5     7
 7     8     8     2     5
 5     7     7     2     9

b = [5 7 8 9 2];