J'essaie d'exécuter ce code et les deux derniers produits avec points affichent une erreur, comme suggéré dans l'en-tête. J'ai vérifié la taille des matrices et les deux sont (3, 1), alors pourquoi est-ce qu'il me montre une erreur en faisant un produit scalaire?
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))
En convertissant la matrice en tableau en utilisant
n12 = np.squeeze(np.asarray(n2))
X12 = np.squeeze(np.asarray(x1))
résolu le problème.
Contrairement à l'arithmétique standard, qui souhaite que les dimensions correspondent, les produits point exigent que les dimensions soient l'une des suivantes:
(X..., A, B) dot (Y..., B, C) -> (X..., Y..., A, C)
, où ...
signifie "0 ou plusieurs valeurs différentes(B,) dot (B, C) -> (C,)
(A, B) dot (B,) -> (A,)
(B,) dot (B,) -> ()
Votre problème est que vous utilisez np.matrix
, ce qui est totalement inutile dans votre code. Le but principal de np.matrix
est de traduire a * b
en np.dot(a, b)
. En règle générale, np.matrix
n'est probablement pas un bon choix.
La colonne de la première matrice et la ligne de la deuxième matrice doivent être égales et l'ordre doit être comme ceci seulement
column of first matrix = row of second matrix
et ne pas suivre l'étape ci-dessous
row of first matrix = column of second matrix
ça va jeter une erreur
numpy.dot(a, b, out=None)
Produit à points de deux tableaux.
Pour N dimensions, il s'agit d'un produit somme sur le dernier axe de a
et l'avant-dernier de b
.
Documentation: numpy.dot .