2012-11-13 10 views
16

ich ein 3 Spalten haben, n Reihen Matrix:Norm Funktion Zeilen der Matrix Anwendung - Matlab

[ a,b,c; 
    d,e,f; 
    g,h,i; ] 

Ich will die Norm-Funktion auf jede der Reihen anzuwenden, und eine 1xn Matrix, die die Normen enthält, :

[ norm([a,b,c]); 
    norm([d,e,f]); 
    norm([g,h,i]); ] 

Ich könnte dies mit einer for-Schleife tun, aber gibt es einen besseren Weg?

+2

eigentlich ist das ein Problem von mir auch. In meinem Fall muss ich die Norm der Position der Teilchen auswerten, deren Koordinaten in den Reihen der Matrix liegen. Was ich normalerweise tue, ist: 'Normen = sqrt (A (:, 1).^2 + A (:, 2).^2 + A (:, 3).^2)'. Aber ich vermute stark die Existenz eines klügeren Weges;). – Acorbe

Antwort

29

Was

norms = sqrt(sum(A.^2,1)) 

oder

norms = sqrt(sum(A.^2,2))? 

je nachdem, ob Ihre Koordinaten sind in Zeilen oder in Spalten.

+2

Sie meinen "Koordinaten sind in Spalten oder Zeilen". sum (..., 1) addiert jede Spalte nach oben und summiert sich (..., 2) über jede Zeile. – Robino

1

wenn die erste Dimension nicht zu groß ist:

norms = sqrt(diag(A * A')); 
+2

Es sieht für mich aus, dass Sie immer die größere Dimension haben müssen, ich meine, um nützlich zu sein, muss "A * A" immer eine "n x n" -Matrix zurückgeben. Das würde Ihnen jedoch viel Overhead geben. – Acorbe

+0

Ja, das Ergebnis von 'A * A'' ist nxn. – Serg

+1

Code soll Spaß beim Lesen sein, oder? : P – Robino

1

Wenn Lesbarkeit eine größere Berücksichtigung als Leistung Sie auch interessieren könnten:

norms = cellfun(@norm,num2cell(A,2)); 

Dieses Muster für andere Operationen auch anpassungsfähig ist entlang eines Dimension, die Sie ausführen möchten, wenn MATLAB sie nicht nativ unterstützt.