如何去交错向量?
How to de-interleave a vector?
如何有效地重新排序向量?这些数字代表电影中的 'frames',按以下顺序排序:
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
;有没有更有效的方法来做到这一点?
Reshape a
to the required shape and use 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));
如何有效地重新排序向量?这些数字代表电影中的 'frames',按以下顺序排序:
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
;有没有更有效的方法来做到这一点?
Reshape a
to the required shape and use 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));