matlab数组按照指定顺序重排

需求及实现

直接上例子要说明:比如现在我们有一个b的序列,我们想按照c规定的顺序重排:

实现命令:b(:,c)
意思:b的所有列元素(第二个参数),按照c给定的顺序重排

b = [7 14 -10 12];
c = [2 3 1 4];

b1cp = b(:,c)

效果:

b1cp =

    14   -10     7    12

上面的例子是行向量按照指定的顺序进行重排,同理可以得到列向量按照指定顺序重排:

列元素如下,排列顺序c不变:

实现命令:b(c,:)
意思:b的所有行元素(第二个参数),按照c给定的顺序重排

b = [7;14;-10;12];
c = [2 3 1 4];

b2cp = b(c,:)

效果:

b2cp =

    14
   -10
     7
    12

补充1:如果不用上面的简便写法,用循环如何实现

b = [7 14 -10 12];
c = [2 3 1 4];

b_result = zeros(1,4);
for n = 1:length(b)
    b_result(n) = b( c(n) );
end
b_result

补充2:现在需求有所改变,c是对b各个元素调整到指定位置。
意思说明:b的第1个元素调到第2的位置,b的第2个元素调到第3的位置,b的第3个元素调到第1的位置,b的第4个元素调到第4的位置。该需求最终结果为:

没有快速方法,只能直接用循环来写:

b = [7 14 -10 12];
c = [2 3 1 4];

b_result = zeros(1,4);
for n = 1:length(b)
    b_result( c(n) ) = b(n);  % 这里稍有区别
end
b_result

效果:

b_result =

   -10     7    14    12

你可能感兴趣的:(matlab数组按照指定顺序重排)