每第n列重新排列矢量

时间:2018-01-30 07:41:02

标签: matlab vector

假设我有一个向量:

A=[1 2 3 6 7 8 11 12 13]

我试图获得最终输出,如:

[1 6 11 2 7 12 3 8 13]

将向量重新排列到每第n列的前面,在本例中为第3列。使用索引可以工作,但它需要一个循环,我试图避免。知道如何以矢量化的方式做到这一点吗?谢谢!

nth=3;
for i=1:nth:size(A,2)
    A_(:,nth)= A(:,i:nth:end)
end

1 个答案:

答案 0 :(得分:1)

@jodag在评论中发布的建议完全正常。或者,这也应该起作用......但约束是相同的,A必须可以被nth整除:

nth = 3;
A = [1 2 3 6 7 8 11 12 13];
A_len = numel(A);
A_div = floor(A_len / nth);

seq = repmat(1:nth:A_len,1,A_div);
inc = sort(repmat(0:nth-1,1,A_div));

A = A(seq + inc)

输出:

A =
     1     6    11     2     7    12     3     8    13