3

我在一个数组中有一组值(比如 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 中对向量进行这种分组?

4

3 回答 3

3

您可以使用

y = mat2cell(A,1, diff([0:n:numel(A)-1 numel(A)]));

然后a1=y{1}等等。

于 2013-07-05T19:08:26.613 回答
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}; 
...
于 2013-07-05T18:21:04.137 回答
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
于 2013-07-05T23:37:00.187 回答