2016-03-23 40 views
0

İki sütun matrisine M=[0,1;2,3;4,5] sahip olduğumu düşünelim ve bunları aynı anda iki vektöre bölmek istiyorum. Yapmak istediğim [A,B] = M yani A=[0;2;4] ve B=[1;3;5] ama bu işe yaramaz. Tek bir kod satırında bunu yapmanın bir yolu var mı? Benim gerçek matrisim yaklaşık 20 sütun içeriyor, bu yüzden onları bir satırda saklamak harika olurdu!Bir matrisi çoklu sütunlara bölme

+0

Bunu neden yapmak istiyorsunuz? – excaza

+0

Bunu neden yapmak istersiniz? Neden “A”, “M (:, 1)' den daha iyi? A, B, C, ... 'yi, bazı kötü kodlara başvurmadan döngü yapamayacağınız gerçeğin dışında ... – beaker

+0

Buna ihtiyacım var çünkü vektörlerin özel bir anlamı var ve daha sonra bir alt kümeyi seçmem gerekiyor değişken adına göre. Eğer indeks kullanırsam, o zaman değişken isimleri olmadığı için anlamlarının ne olduğunu bilmiyorum –

cevap

4

Bunu yapmanın en kolay yolu, num2cell ve deal'un birleşimidir.

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 

Alternatif olarak, suggested by Daniel gibi deal atlayabilirsiniz: Eğer unsurların daha çok sayıda varınca

[A, B] = inputData{:}; 

söyleniyor, sadece hücre dizisinde onları terk yerine 20 hokkabazlık yapmaya çalışmak yerine değişkenler.

columns = num2cell(M, 1); 

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

Bu tam olarak aradığım şey. Bunu daha önce denedim ama M zaten bir hücre dizisi oldu, bu yüzden kritik olan hücreye dönüşümü atladım. –

+0

@ HéctorvandenBoorn Bu, doğrudan sorununuzu çözebilirken. İlk yorumlarda kabı ve excaza'nın tavsiyesini şiddetle tavsiye ederim. Verileriniz aynı boyuttaysa, performans daha iyi olacak diye bir 2B dizisine eklemeyi düşünün. – Suever

+2

'deal': '[A, B] = inputData {:};' – Daniel