我在数组中有一组值(比如20个值)。
A = [1:20]
我想将其划分为已知大小的子集。 如果我想将它分成4组大小5,那么我可以使用
y = reshape(A,5,4)'
但我的问题是当我没有匹配的倍数时。 假设我想将数组分成3组。所以会有7组,但最后一组会很短。
我想要的是什么
a1= [1 2 3]
a2= [4 5 6]
a3= [7 8 9]
a4= [10 11 12]
a5= [13 14 15]
a6= [16 17 18]
a7= [19 20]
如何在MATLAB中对矢量进行这种子分组?
答案 0 :(得分:3)
您可以使用
y = mat2cell(A,1, diff([0:n:numel(A)-1 numel(A)]));
然后a1=y{1}
等等。
答案 1 :(得分:1)
你需要为此编写自己的函数。例如:
A = 1:20;
n = length(A);
x = 3;
y = ceil(n/x);
out = cell(y,1);
for i = 1:y
startIdx = x*(i-1)+1;
endIdx = min(startIdx + x - 1,n);
out{i} = A(startIdx:endIdx);
end
然后您可以访问单元格数组中的每一行:
a1 = out{1};
a2 = out{2};
...
答案 2 :(得分:0)
A = 1:20;
n = 3;
% y = number of sets
y = ceil(length(A) / n);
ai = num2cell(reshape(A(1:n*y),m,n)');
if length(A) > n * y
ai = [ai; A(n*y+1:end)];
end