提取向量的子向量

时间:2013-07-05 17:59:44

标签: matlab

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

3 个答案:

答案 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