我有一個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)
我有一個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)
你可以寫一個(我用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
是,使用deal
:
p1 = 2;
p2 = 4;
[K1, K2, K3] = deal(K(1:p1),K(p1+1:p1+p2),K(p1+p2+1:end))
我想你的意思'[K1,K2,K3 =交易(K (1:P1),K(P1 + 1:P1 + P2),K(P1 + P2 + 1:結束))'。 – Ramashalanka
非常感謝 – zahmati
@Ramashalanka是的,你是對的。我的錯。編輯。 – scmg
這可能是一個更好的選擇,因爲您不需要創建任何單獨的函數,也不需要像其他答案那樣手動分割它。它還具有僅創建單個變量(單元格數組)而不是變量列表的優點。
使用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
如果你想要這種類型的輸出'K1,K2,K3'而不是單個單元陣列,你也可以用@ Santhan的'out = mat2cell(K,1,[2 4 6]);''然後' [K1,K2,K3] = OUT {:};'。 – Ramashalanka