2009-12-31 1171 views
13

¿Cómo puedo calcular el producto cruzado de dos vectores sin el uso de bibliotecas de programación?Producto en cruz de dos vectores en Python

vectores dados por ejemplo a = (1, 2, 3) y b = (4, 5, 6)

+5

La fórmula para el producto vectorial se puede encontrar en http://mathworld.wolfram.com/CrossProduct.html. Regrese después de haber leído eso si todavía tiene un problema de programación. –

Respuesta

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

'sin el uso de bibliotecas de programación' ... –

+0

perdón por eso. – fulmicoton

+7

Si bien no es una respuesta a los requisitos, Paul tiene un punto: ¡Si necesita ese tipo de cosas, realmente * debería * ver en numpy! Además, si juegas con vectores 3D en tus estudios, echa un vistazo a VPython: hace que visualizar estas cosas sea inmensamente fácil y divertido. –

33

se le pregunta acerca de la fórmula para el producto vectorial? ¿O cómo hacer indexación y listas en python?

La idea básica es que acceda a los elementos de ayb como [0], a [1], a [2], etc. (para x, y, z) y cree una nueva lista con [elemento_0, elemento_1, ...]. También podemos envolverlo en una función.

En el lado del vector, el producto cruzado es el producto antisimétrico de los elementos, que también tiene una buena interpretación geométrica.

De todos modos, sería mejor para darle consejos y dejar que te diste cuenta, pero eso no es realmente el camino tan, tan ...

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

¡gracias por la etiqueta! – blur959

+7

De nada (pero no hay necesidad de agradecer a cada uno de nosotros individualmente). Sin embargo, podría "aceptar" una de las respuestas: pista, sugerencia, ... –

1

Si desea aplicar el producto vectorial sí mismo que puede ver http://en.wikipedia.org/wiki/Vector_cross_product o un libro de matemática/física. Poco (a1, a2, a3) X (b1, b2, b3) = (a2 * b3-a3 * b2, a3 * b1-a1 * b3, a1 * b2-a2 * b1)

+0

¡gracias por la información! ¡Apreciarla! – blur959

1

para múltiples dimensiones , esto podría funcionar;

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

¿Qué tal? usando recursión para esto? ... Sería más elegante. – Sardathrion

1

de edad, pero si alguien va a necesitar: lo hice así:

cross_product DEF (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