wake-up-neo.net

Wertefehler anzeigen: Formen (1,3) und (1,3) nicht ausgerichtet: 3 (Dim 1)! = 1 (Dim 0)

Ich versuche, diesen Code auszuführen, und die letzten 2-Punkt-Produkte zeigen Fehler an, wie in der Überschrift vorgeschlagen. Ich habe die Größe der Matrizen überprüft und beide sind (3, 1).

coordinate1 = [-7.173, -2.314, 2.811] 
coordinate2 = [-5.204, -3.598, 3.323] 
coordinate3 = [-3.922, -3.881, 4.044] 
coordinate4 = [-2.734, -3.794, 3.085] 

import numpy as np 
from numpy import matrix
coordinate1i=matrix(coordinate1)
coordinate2i=matrix(coordinate2)
coordinate3i=matrix(coordinate3)
coordinate4i=matrix(coordinate4)

b0 = coordinate1i - coordinate2i
b1 = coordinate3i - coordinate2i
b2 = coordinate4i - coordinate3i

n1 = np.cross(b0, b1)
n2 = np.cross(b2, b1)

n12cross = np.cross(n1,n2)
x1= np.cross(n1,b1)/np.linalg.norm(b1)
print np.shape(x1)
print np.shape(n2)
np.asarray(x1)
np.asarray(n2)

y = np.dot(x1,n2)
x = np.dot(n1,n2)

return np.degrees(np.arctan2(y, x))
8
shome

Durch Konvertieren der Matrix in ein Array mit 

n12 = np.squeeze(np.asarray(n2))

X12 = np.squeeze(np.asarray(x1))

das Problem gelöst.

10
shome

Anders als bei der Standard-Arithmetik, bei der passende Abmessungen gewünscht werden, müssen für Punktprodukte folgende Abmessungen verwendet werden:

  • (X..., A, B) dot (Y..., B, C) -> (X..., Y..., A, C), wobei ... "0 oder mehr verschiedene Werte" bedeutet
  • (B,) dot (B, C) -> (C,)
  • (A, B) dot (B,) -> (A,)
  • (B,) dot (B,) -> ()

Ihr Problem ist, dass Sie np.matrix verwenden, was in Ihrem Code völlig unnötig ist. Der Hauptzweck von np.matrix ist es, a * b in np.dot(a, b) zu übersetzen. In der Regel ist np.matrix wahrscheinlich keine gute Wahl.

4
Eric

Die Spalte der ersten Matrix und die Zeile der zweiten Matrix sollten gleich sein und die Reihenfolge sollte nur so sein 

column of first matrix = row of second matrix

und folgen Sie nicht dem untenstehenden Schritt

row of first matrix  = column of second matrix

es wird ein Fehler ausgegeben 

3
Shinto Joseph
numpy.dot(a, b, out=None)

Punktprodukt aus zwei Arrays.

Für N-Dimensionen ist es ein Summenprodukt über der letzten Achse von a und dem vorletzten von b.

Dokumentation: numpy.dot .

1
S. Theon