web-dev-qa-db-fra.com

Affichage de ValueError: formes (1,3) et (1,3) non alignées: 3 (dim 1)! = 1 (dim 0)

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

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.

10
shome

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.

4
Eric

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 

3
Shinto Joseph
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 .

1
S. Theon