Frage

Es scheint, dass die Antwort darauf einfach sein sollte, aber ich bin ratlos. Ich habe eine Matrix von NX3 -Matrix, bei der die 1. 2. und 3. Spalten die XY- und Z -Koordinaten des n -ten Elements sind. Ich möchte den Abstand vom Ursprung zum Artikel berechnen. In einer nicht vektorisierten Form ist dies einfach.

Entfernung = Norm ([xyz]);

oder

Entfernung = sqrt (x^2+y^2+z^2);

In vektorisierter Form ist es jedoch nicht so einfach. Wenn Sie eine Matrix übergeben, um zu normieren, gibt sie die euklidische Länge nicht mehr zurück.

Entfernung = Norm (Matrix); %funktioniert nicht

und

Entfernung = SQRT (x (:, 1).*x (:, 1)+y (:, 2).*y (:, 2)+z (:, 3).*Z (:, 3)); %scheint einfach unordentlich zu sein

Gibt es einen besseren Weg, dies zu tun?

War es hilfreich?

Lösung

Versuche dies:

>> xyz = [1 2 3; 4 5 6; 7 8 9; 2 8 4]

xyz =

     1     2     3
     4     5     6
     7     8     9
     2     8     4

>> distance = sqrt(sum(xyz.^2, 2))

distance =

          3.74165738677394
          8.77496438739212
          13.9283882771841
          9.16515138991168

Andere Tipps

Ja da ist.

distance = sqrt(sum(matrix.^2,2)); %# matrix is [x y z]

Um die Normen von Vektoren einer Matrix zu erhalten

vecnorm( A, p, dim)

wurde in Matlab 2017b eingeführt. Für die angegebene Frage die euklidische Entfernung (L2-Norm), setzen Sie P = 2 und zeilenweise Operationen, dim = 2.

vecnorm( X, 2, 2)

Ich denke, der Weg zu gehen ist distance = sqrt(matrix(:,1).^2+matrix(:,2).^2+matrix(:,3).^2).

Schleifen in Matlab sind einfach zu langsam. Vektoroperationen werden immer bevorzugt (wie Sie sicher wissen). Zusätzlich verwendet .^2 (Element-Wise Quadring) muss nicht jede Spalte Ihrer Matrix zweimal nachsehen, daher wäre dies noch schneller.

Mit H2O

h2o.init()
df1<-as.h2o(matrix1)
df2<-as.h2o(matrix2)
distance<-h2o.distance(df1,df2,"l2")
#l2 for euclidean distance
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top