【发布时间】:2021-03-26 21:28:28
【问题描述】:
我正在寻找一种将输入向量拆分为预定义大小的组的方法,如果有余数,最后一组会更小。我更喜欢将输出作为单元格,但我不介意它是否是任何其他类,只要它使用后续索引提供对子组的访问即可。
以下是预期行为的示例:
% Even split
v = 1:6;
grpSz = 2;
% OUT: {[1,2], [3,4], [5,6]}
% Remainder
v = 1:5;
grpSz = 3;
% OUT: {[1,2,3], [4,5]}
% Single group
v = 1:5;
grpSz = 6;
% OUT: {[1,2,3,4,5]}
以下是几个有用的数量:
- 输出中的组数:
nG = ceil(numel(v)/grpSz) - 最后一组中的元素数:
r = mod(numel(v), grpSz)
目前我正在使用mat2cell:
function out = evenSplitter(v, grpSz)
nV = numel(v);
nG = ceil(nV/grpSz);
r = mod(nV, grpSz);
out = mat2cell(v, 1, [repmat(grpSz, 1, nG-1), ~r*grpSz+r]);
...可行,但看起来有点笨拙。有人会提出更优雅的解决方案吗?
【问题讨论】:
标签: matlab vector grouping vectorization matrix-indexing