2016-09-21 5 views
5

Ich versuche, diesen Code auszuführen, und die letzten 2 Punkt Produkte zeigen Fehler wie in der Überschrift vorgeschlagen. Ich überprüfte die Größe der Matrizen und beide sind (3, 1), dann warum zeigt es mir einen Fehler, während ich Punktprodukt mache?Zeige ValueError: shapes (1,3) und (1,3) nicht ausgerichtet: 3 (dim 1)! = 1 (dim 0)

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)) 

Antwort

7

durch die Matrix zum Umwandeln Array von

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

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

das Problem gelöst werden.

3

Im Gegensatz zu Standard-Arithmetik, die passenden Abmessungen wünscht, erfordern Skalarprodukte, dass die Abmessungen eines von:

  • (X..., A, B) dot (Y..., B, C) -> (X..., Y..., A, C), wo ... „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.

0
numpy.dot(a, b, out=None) 

Punktprodukt von zwei Arrays.

Für N Dimensionen ist es ein Summenprodukt über die letzte Achse von a und das vorletzte von b.

Dokumentation: numpy.dot.

4

Die Spalte der ersten Matrix und der Zeile der zweiten Matrix sollte gleich sein und die Reihenfolge, wie diese nur

column of first matrix = row of second matrix 

und folgen nicht dem unter Schritt

row of first matrix = column of second matrix 

es sein sollte wird einen Fehler

werfen
Verwandte Themen