2013-07-05 104 views
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矢量?

回答

3

您可以使用

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

然后a1=y{1}等。

+0

+1很好的使用提供此功能的Matlab函数。只需要清楚,'n'是子集的最大大小。所以,举个例子,'n = 3'会让'y {7}'成为'[19 20]' –

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}; 
... 
+0

+1您可以使用1:x:length(A)而不是计算'startIdx'和'endIdx'。除此之外,一个很好的答案。 –

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