2016-06-20 12 views
1

ich eine Matrix der Größe M x N haben, wobei M groß ist, und N ist um 30.Extract Matrix Spalten und speichern sie in einzelnen Vektoren

[A,B,C,...,AD] = A(:,1:30) 

Der Grund, warum ich, dass ich fragen, ist, dass ich geben möchte die Spalten ein spezifischer Name (hier A, B a, c, ..., AD) aufweisen und Kraft nicht zu schreiben:

[A,B,C,...,AD] = deal(A(:,1),A(:,2),A(:,3),...,A(:,30)) 
+0

müssen die Vektoren individuell sein oder macht eine Tabelle eine Option? – Finn

+0

Das ist der Punkt, sie müssen individuell sein. – Tulkkas

+0

Aber ... wenn Sie alle in ihre eigenen Variablen setzen, können Sie 'bsxfun' nicht verwenden! :-O – beaker

Antwort

1

Es ist in der Regel besser, alle Spalten zusammen zu halten in der Matrix und sie nur durch Zugriff ihr Spaltenindex.

Wenn Sie sie wirklich in Variablen trennen müssen, können Sie die Matrix in ein Zellenarray ihrer Spalten mit num2cell konvertieren und dann ein comma-separated list generieren, das auf der rechten Seite der Zuweisung verwendet wird. Beachten Sie auch, dass in den letzten Matlab Versionen können Sie remove deal:

A = magic(3); % example matrix 
Ac = num2cell(A, 1); 
[c1 c2 c3] = Ac{:}; % or [c1 c2 c3] = deal(Ac{:}); 
0

Zur Erzeugung dass ich lexikographischer Sequenz vor kurzem aus Unwissenheit, diese auf die Anzahl der Spalten

Data = rand(2,671); 
r = rem(size(Data,2),26); 
m = floor(size(Data,2)/26); 
Alf = char('A'+(0:25)'); %TeX-like char seq 

if m == 0 
    zzz = Alf(1:r); 
else 
    zzz = Alf; 
    for x = 1:m-1 
     zzz = char(zzz,[char(Alf(x)*ones(26,1)),Alf]); 
    end 
    if r > 0 
     zzz = char(zzz, [char(Alf(m+1)*ones(r,1)),Alf(1:r)]); 
    end 
end 

Je schrieb es Spaltennamen erzeugt, bis ZZ. Bitte lassen Sie mich wissen, ob es dafür in Matlab einen entsprechenden Befehl gibt.


Sie würden jemals nie eval für solche Dinge verwenden !!! eval Einsatz ist gefährlich und falsch (aber man kann nicht widerstehen):

% ========== 
% Assign Data to indices 
% ========== 

for ind = 1:size(Data,2) 
    eval([zzz(ind,:) '= Data(:,' num2str(ind) ');']); 
end 

und Ihr Arbeitsbereich sieht aus wie eine Buchstabensuppe.

Verwandte Themen