Matlab 每n列重新排列向量

Matlab 每n列重新排列向量,matlab,vector,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 在评论中发布@jodag的建议效果完全不错。或者,这也应该做的工作。。。但是约束是相同

假设我有一个向量:

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

在评论中发布@jodag的建议效果完全不错。或者,这也应该做的工作。。。但是约束是相同的,
A
必须可以被
n
整除:

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

假设
A
的长度可以被3整除,那么
整形(整形(A,3,[]),1,[])
应该可以工作。@jodag,要将其概括为问题中的第n列,只需将
3
替换为
n