2016-03-23 11 views
0

2列の行列M=[0,1;2,3;4,5]があり、それらを同時に2つのベクトルに分割したいとします。私がしたいのは[A,B] = MだからA=[0;2;4]B=[1;3;5]ですが、これはうまくいきません。 これをコードの1行で実行できる方法はありますか?私の実際の行列は約20列なので、それらを1行に格納することは素晴らしいでしょう!行列を複数の列に分割する

+0

なぜこれをやりたいですか? – excaza

+0

なぜそれをしたいですか?なぜ 'A'は' M(:、1) 'より本質的に優れていますか?あなたはいくつかの厄介なコードに頼らずに 'A、B、C、... 'をループすることができないという事実を除いて... – beaker

+0

ベクトルには特別な意味があり、後でサブセットを選択する必要があるので、変数名に従ってください。私がインデックスを使用する場合、変数名がないので意味が分かりません –

答えて

4

これを行う最も簡単な方法は、num2celldealの組み合わせです。あなたは要素のより大きな数に到達したとき、ちょうどむしろ20を両立しようとするよりも、セル配列でそれらを残して、言われていること

[A, B] = inputData{:}; 

あなたが dealを省略することができます suggested by Danielとして
M = rand(4,2); 

    0.8173 0.2599 
    0.8687 0.8001 
    0.0844 0.4314 
    0.3998 0.9106 


inputData = num2cell(M, 1); 
[A, B] = deal(inputData{:}); 


A = 

    0.8173 
    0.8687 
    0.0844 
    0.3998 

B = 

    0.2599 
    0.8001 
    0.4314 
    0.9106 

代わりに、変数。

columns = num2cell(M, 1); 

    [4x1 double] [4x1 double] 
+0

これはまさに私が探していたものです。私は前にこれを試しましたが、Mはすでにセル配列だったので、セルへの変換をスキップしました。これは重要です。 –

+0

@HéctorvandenBoornこれはあなたの直接の問題を解決するかもしれませんが。最初のコメントでビーカーとexcazaのアドバイスを強くお勧めします。データが同じサイズの場合は、パフォーマンスが向上するため、2D配列に配置することを検討してください。 – Suever

+2

'deal'を使う必要はない:' [A、B] = inputData {:}}; ' – Daniel

関連する問題