将矢量拆分为大小为n的部分

时间:2014-10-14 10:55:39

标签: matlab

我想在大小为v的部分中拆分向量n,并获取定义这些部分的索引(idx)。例如,v = [2 1 4 6], n=2, idx =[1 1 2 2]。这里我们有两个大小为2的部分。数字length(v)/n有可能不是圆的。在这种情况下,我们从大小为n的部分开始,最后一部分的大小不是n。例如,v = [2 1 4 6 8], n=2, idx =[1 1 2 2 3]。在这里,我们再次有两个部分,但没有相同数量的元素。我们可以不用for循环吗?

PS:我现在希望这个问题不那么模糊。

2 个答案:

答案 0 :(得分:3)

问题编辑后:

idx = ceil( (1:numel(v)) / floor(numel(v)/n) );

答案 1 :(得分:1)

这是我的版本:

% allocate indices (initialized with largest index to handle non-divisible case)
idx = zeros(size(v)) + parts;

% number of elements per part
k = floor(numel(idx) / parts);

% fill indices (matrix linearized using column-major order)
idx(1:parts*k) = repmat(1:parts, [k,1]);