İ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
cevap
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]
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. –
@ 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
'deal': '[A, B] = inputData {:};' – Daniel
Bunu neden yapmak istiyorsunuz? – excaza
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
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 –