2009-12-31 5 views
13

Comment calculer le produit croisé de deux vecteurs sans l'utilisation de bibliothèques de programmation?Produit croisé de deux vecteurs en Python

vecteurs a = (1, 2, 3) et b = (4, 5, 6)

+5

La formule pour le produit croisé peut être trouvé à http://mathworld.wolfram.com/CrossProduct.html. Revenez après avoir lu cela si vous avez toujours un problème de programmation. –

Répondre

29
import numpy as np 
a = np.array([1,0,0]) 
b = np.array([0,1,0]) 
print np.cross(a,b) 
+1

'sans utilisation de bibliothèques de programmation' ... –

+0

désolé pour cela. – fulmicoton

+7

Bien que n'étant pas une réponse aux exigences, Paul a un point: Si vous avez besoin de ce genre de choses, vous devriez vraiment * devrait * se pencher sur numpy! En outre, si vous jouez avec des vecteurs 3D dans vos études, consultez VPython - cela rend la visualisation de ces choses extrêmement facile et amusante. –

33

données demandent par exemple vous au sujet de la formule pour le produit croisé? Ou comment faire l'indexation et les listes en python? L'idée de base est que vous accédez aux éléments de a et b en tant que [0], [1], [2], etc. (pour x, y, z) et que vous créez une nouvelle liste avec [element_0, element_1, ...]. Nous pouvons également l'envelopper dans une fonction. Du côté vectoriel, le produit croisé est le produit antisymétrique des éléments, ce qui a également une belle interprétation géométrique.

Quoi qu'il en soit, il serait préférable de vous donner des conseils et vous permettent de le comprendre, mais ce n'est pas vraiment la façon SO, donc ...

def cross(a, b): 
    c = [a[1]*b[2] - a[2]*b[1], 
     a[2]*b[0] - a[0]*b[2], 
     a[0]*b[1] - a[1]*b[0]] 

    return c 
+0

merci pour l'étiquette! – blur959

+7

Vous êtes les bienvenus (mais il n'y a pas besoin de remercier chacun de nous individuellement.) Cependant, vous pouvez "accepter" l'une des réponses - indice, indice, ... –

1

Si vous souhaitez implémenter vous-même produit croisé vous peut voir http://en.wikipedia.org/wiki/Vector_cross_product ou un livre de math/physique. Peu de temps (a1, a2, a3) X (b1, b2, b3) = (a2 * b3-a3 * b2, a3 * b1-a1 * b3, a1 * b2-a2 * b1)

+0

merci pour l'info! Apprécier! – blur959

1

pour plusieurs dimensions , cela pourrait fonctionner;

def crossProd(a,b): 
     dimension = len(a) 
     c = [] 
     for i in range(dimension): 
     c.append(0) 
     for j in range(dimension): 
      if j <> i: 
      for k in range(dimension): 
       if k <> i: 
       if k > j: 
        c[i] += a[j]*b[k] 
       elif k < j: 
        c[i] -= a[j]*b[k] 
     return c 
+1

Que diriez-vous? en utilisant la récursion pour cela? ... Ce serait plus élégant. – Sardathrion

1

vieux, mais si quelqu'un aura jamais besoin: je l'ai fait comme ceci:

def cross_product (u, v):

dim = len(u) 
s = [] 
for i in range(dim): 
    if i == 0: 
     j,k = 1,2 
     s.append(u[j]*v[k] - u[k]*v[j]) 
    elif i == 1: 
     j,k = 2,0 
     s.append(u[j]*v[k] - u[k]*v[j]) 
    else: 
     j,k = 0,1 
     s.append(u[j]*v[k] - u[k]*v[j]) 
return s