2015-05-20 71 views
2

我有一个Matlab阵列MATLAB:斯普利特阵列

K=[2, 4, 5, 7, 7.3, 8, 9, 0, 2.1, 5, 7, 3] % 1x12 

我需要把它分成三个阵列

[K1, K2, K3] = K 

K1= 1 x 2 
K2= 1 x 4 
K3= 1 x 6 

是否有任何单列直插式命令做这样的分裂?

[K1,K2,K3]=split(K,2,4,6) 

回答

3

你可以写一个(我用splitmat避免超载split):

function varargout = splitmat(K,varargin) 
nextpos = 1; 
for argnum = 1:nargin-1 
    varargout{argnum} = K(nextpos:nextpos+varargin{argnum}-1); 
    nextpos = nextpos + varargin{argnum}; 
end 

给予输出:

>> [K1,K2,K3]=splitmat(K,2,4,6) 
K1 = 
    2  4 
K2 = 
    5.0000 7.0000 7.3000 8.0000 
K3 = 
    9.0000   0 2.1000 5.0000 7.0000 3.0000 
+0

如果你想要这种类型的输出'K1,K2,K3'而不是单个单元阵列,你也可以用@ Santhan的'out = mat2cell(K,1,[2 4 6]);''然后' [K1,K2,K3] = OUT {:};'。 – Ramashalanka

1

是,使用deal

p1 = 2; 
p2 = 4; 
[K1, K2, K3] = deal(K(1:p1),K(p1+1:p1+p2),K(p1+p2+1:end)) 
+1

我想你的意思'[K1,K2,K3 =交易(K (1:P1),K(P1 + 1:P1 + P2),K(P1 + P2 + 1:结束))'。 – Ramashalanka

+0

非常感谢 – zahmati

+1

@Ramashalanka是的,你是对的。我的错。编辑。 – scmg

3

这可能是一个更好的选择,因为您不需要创建任何单独的函数,也不需要像其他答案那样手动分割它。它还具有仅创建单个变量(单元格数组)而不是变量列表的优点。

使用mat2cell

out = mat2cell(K,1,splitvec) 

输入:

K = [2, 4, 5, 7, 7.3, 8, 9, 0, 2.1, 5, 7, 3]; 
splitvec = [2 4 6]; 

结果:

>> celldisp(out) 

out{1} = 

2  4 

out{2} = 

5.0000 7.0000 7.3000 8.0000 

out{3} = 

9.0000   0 2.1000 5.0000 7.0000 3.0000