如何解交织矢量?

问题描述 投票:0回答:1

如何有效地重新排序矢量?这些数字代表电影中的“帧”,按以下顺序排序:

a=[1 4 7 2 5 8 3 6 9];

结果应该是一个单元格数组,其中不同的流以1,2和3开头:

b{1}=[1 2 3];
b{2}=[4 5 6];
b{3}=[7 8 9];

现在我正在使用for循环,但我有一个预感,它可以比for循环更有效地(即更少的代码行,更少的运行时间)完成:

for ind=1:3
    b{ind}=a(ind:3:end);
end

最终的代码有ind=1:30000而不是ind=1:3;有没有更有效的方法来做到这一点?

matlab vector cell-array
1个回答
1
投票

Reshape a到所需的形状,并使用matrix indexing访问其相关的行。

bmat = reshape(a,k,[]);  %k equals 3 in your example
%bmat(1,:) will be your b{1},   bmat(2,:) --> b{2},   and so on.

如果你真的需要将它转换成你问题中的单元格,那么使用mat2cell如下:

b = mat2cell(bmat, ones(k,1));    
© www.soinside.com 2019 - 2024. All rights reserved.