Recherche…


Syntaxe

  • numpy.cross(a, b) # produit croisé de a et b (ou vecteurs dans a et b )
  • numpy.cross(a, b, axisa=-1) #cross produit de vecteurs dans a avec b , st vecteurs dans a sont disposés le long de l'axe axisa
  • numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1) # produits croisés de vecteurs dans a et b , vecteurs de sortie disposés selon l'axe spécifié par axisc
  • numpy.cross(a, b, axis=None) # produit croisé des vecteurs en a et b , vecteurs en a , b et en sortie disposés suivant l'axe des axes

Paramètres

Colonne Colonne
un B Dans l'usage le plus simple, a et b sont deux vecteurs à 2 ou 3 éléments. Ils peuvent également être des tableaux de vecteurs (c.-à-d. Des matrices à deux dimensions). Si a est un tableau et que 'b' est un vecteur, cross(a,b) renvoie un tableau dont les éléments sont les produits croisés de chaque vecteur dans a vecteur b . Le b est un tableau et a est un seul vecteur, le cross(a,b) renvoie un tableau dont les éléments sont les produits croisés d' a avec chaque vecteur de b . a et b peuvent tous deux être des tableaux s'ils ont la même forme. Dans ce cas, cross(a,b) renvoie cross(a[0],b[0]), cross(a[1], b[1]), ...
axisa / b Si a est un tableau, des vecteurs peuvent être disposés sur l'axe variant le plus rapidement, l'axe variant le plus lent ou quelque chose entre les deux. axisa dit en cross() comment les vecteurs sont disposés dans a . Par défaut, il prend la valeur de l'axe variant le plus lentement. axisb fonctionne de la même manière avec input b . Si la sortie de cross() doit être un tableau, les vecteurs de sortie peuvent être disposés sur différents axes de tableau; axisc indique à cross comment disposer les vecteurs dans son tableau de sortie. Par défaut, axisc indique l'axe qui varie le plus lentement.
axe Un paramètre de commodité qui définit axisa , axisb et axisc à la même valeur si vous le souhaitez. Si l' axis et l'un des autres paramètres sont présents dans l'appel, la valeur de l' axis remplacera les autres valeurs.

Produit croisé de deux vecteurs

Numpy fournit une fonction cross pour le calcul des produits vectoriels croisés. Le produit croisé des vecteurs [1, 0, 0] et [0, 1, 0] est [0, 0, 1] . Numpy nous dit:

>>> a = np.array([1, 0, 0])
>>> b = np.array([0, 1, 0])
>>> np.cross(a, b)
array([0, 0, 1])

comme prévu.

Alors que les produits croisés ne sont normalement définis que pour les vecteurs tridimensionnels. Cependant, l'un des arguments de la fonction Numpy peut être deux vecteurs d'éléments. Si le vecteur c est donné comme [c1, c2] , Numpy affecte zéro à la troisième dimension: [c1, c2, 0] . Alors,

>>> c = np.array([0, 2])
>>> np.cross(a, c)
array([0, 0, 2])

Contrairement au dot qui existe à la fois en tant que fonction Numpy et méthode de ndarray , le cross existe uniquement en tant que fonction autonome:

>>> a.cross(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'cross'

Produits Cross Cross multiples avec un appel

Chacune des entrées peut être un tableau de trois (ou deux) vecteurs d'éléments.

>>> a=np.array([[1,0,0],[0,1,0],[0,0,1]])
>>> b=np.array([1,0,0])
>>> np.cross(a,b)
array([[ 0,  0,  0],
       [ 0,  0, -1],
       [ 0,  1,  0]])

Le résultat dans ce cas est array ([np.cross (a [0], b), np.cross (a [1], b), np.cross (a [2], b)])

b peut également être un tableau de vecteurs d'éléments 3 (ou 2), mais il doit avoir la même forme que a . Sinon, le calcul échoue avec une erreur de "non-concordance de forme". Nous pouvons donc avoir

>>> b=np.array([[0,0,1],[1,0,0],[0,1,0]])
>>> np.cross(a,b)
array([[ 0, -1,  0],
       [ 0,  0, -1],
       [-1,  0,  0]])

et maintenant le résultat est array([np.cross(a[0],b[0]), np.cross(a[1],b[1]), np.cross(a[2],b[2])])

Plus de flexibilité avec plusieurs produits croisés

Dans nos deux derniers exemples, numpy supposait qu'un a[0,:] était le premier vecteur, a[1,:] le deuxième et a[2,:] le troisième. Numpy.cross a un argument optionnel axisa qui nous permet de spécifier quel axe définit les vecteurs. Alors,

>>> a=np.array([[1,1,1],[0,1,0],[1,0,-1]])
>>> b=np.array([0,0,1])
>>> np.cross(a,b)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,axisa=0)
array([[ 0, -1,  0],
       [ 1, -1,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,axisa=1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])

Le résultat axisa=1 et le résultat par défaut sont tous deux (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b)) . Par défaut, axisa indique toujours le dernier axe (variant le plus lentement) du tableau. Le résultat axisa=0 est (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b)) .

Un paramètre optionnel similaire, axisb , exécute la même fonction pour l'entrée b , s'il s'agit également d'un tableau à deux dimensions.

Les paramètres axisa et axisb indiquent comment distribuer les données d'entrée. Un troisième paramètre, axisc, indique comment distribuer la sortie si a ou b est multidimensionnel. En utilisant les mêmes entrées a et b que ci-dessus, nous obtenons

>>> np.cross(a,b,1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,1,axisc=0)
array([[ 1,  1,  0],
       [-1,  0, -1],
       [ 0,  0,  0]])
>>> np.cross(a,b,1,axisc=1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])

Donc axisc=1 et axisc par défaut axisc tous deux le même résultat, c'est-à-dire que les éléments de chaque vecteur sont contigus dans l'index le plus rapide du tableau de sortie. axisc est par défaut le dernier axe du tableau. axisc=0 distribue les éléments de chaque vecteur sur la dimension la plus lente du tableau.

Si vous voulez que axisa , axisb et axisc aient tous la même valeur, vous n'avez pas besoin de définir les trois paramètres. Vous pouvez définir un quatrième paramètre, axis , à la valeur unique requise et les trois autres paramètres seront automatiquement définis. l'axe remplace axisa, axisb ou axisc si l'un d'entre eux est présent dans l'appel de fonction.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow