Produit vectoriel d'un vecteur dans NumPy
Considère les vecteurs suivants (essentiellement2x1
matrices):
a = sc.array([[1], [2], [3]])
>>> a
[[1]
[2]
[3]]
b = sc.array([[4], [5], [6]])
>>> b
[[4]
[5]
[6]]
Le produit vectoriel de ces vecteurs peut être calculée à l'aide de numpy.cross()
. Pourquoi n'est-ce pas le travail:
import numpy as np
np.cross(a, b)
ValueError: incompatible dimensions for cross product
(dimension must be 2 or 3)
mais ce n'?:
np.cross(a.T, b.T)
[[-3 6 -3]]
OriginalL'auteur Ingo | 2012-02-12
Vous devez vous connecter pour publier un commentaire.
Pour calculer le produit vectoriel en utilisant
numpy.cross
, la dimension (longueur) de la dimension de la matrice qui définit les deux vecteurs doivent soit par deux ou trois. Pour citer la documentation:Noter que le dernier axe est la valeur par défaut. Dans votre exemple:
le dernier axe est seulement de longueur 1, de sorte que le produit vectoriel n'est pas défini. Toutefois, si vous utilisez les transposer, de la longueur le long de la dernière axe 3, il est donc valide. Vous pouvez aussi faire:
qui raconte
cross
que les vecteurs sont définis le long du premier axe, plutôt que le dernier axe.Non pas que je suis au courant de. Mais est-ce vraiment une tâche ardue, soit de suivre les conventions de la bibliothèque lors de la définition de vos vecteurs, ou de définir de manière explicite leur commande pour faire l'appel?
Non, il n'est pas, mais je suis en train d'écrire le code pour certains élèves et par vexperience il confond par exemple, si les vecteurs sont tous ligne vecteurs lorsqu'ils sont utilisés pour vecteurs colonnes.
Vous pouvez, bien sûr, il suffit de définir un wrapper.
Est-il une raison que le vecteur de taille est limitée à 2 ou 3?
OriginalL'auteur talonmies
Dans numpy nous utilisons souvent des tableaux 1d représenter des vecteurs, et nous les traitons comme un vecteur ligne ou un vecteur colonne en fonction du contexte, par exemple:
Vous pouvez stocker des vecteurs 2d tableaux, ce qui est le plus utile lorsque vous avez une collection de vecteurs que vous voulez traiter d'une manière similaire. Par exemple, si je veux de la croix 4 vecteurs dans un avec 4 vecteurs de b. Par défaut numpy assume les vecteurs sont le long de la dernière dimensions, mais vous pouvez utiliser le axisa et axisb arguments pour spécifier explicitement que les vecteurs sont le long de la première dimension.
OriginalL'auteur Bi Rico
Vous devez créer a et b comme ceci:
de sorte qu'ils ont une dimension = 3.
OriginalL'auteur Ruofeng