2009-12-31 18 views
13

Come posso calcolare il prodotto incrociato di due vettori senza l'uso di librerie di programmazione?Prodotto incrociato di due vettori in Python

es dato vettori a = (1, 2, 3) e b = (4, 5, 6)

+5

La formula per il prodotto vettoriale può essere trovato su http://mathworld.wolfram.com/CrossProduct.html. Torna dopo aver letto che se hai ancora un problema di programmazione. –

risposta

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

'senza uso di librerie di programmazione' ... –

+0

scusate per quello. – fulmicoton

+7

Sebbene non sia una risposta ai requisiti, Paul ha un punto: Se hai bisogno di questo genere di cose, dovresti * guardare * in faccia a capire! Inoltre, se stai giocando con i vettori 3D negli studi, controlla VPython - rende la visualizzazione di queste cose estremamente facile e divertente. –

33

stai chiedendo circa la formula per il prodotto vettoriale? O come fare indicizzazione e liste in python?

L'idea di base è che si accede agli elementi di a e b come [0], a [1], a [2], ecc. (Per x, y, z) e che si crea un nuovo elenco con [elemento_0, elemento_1, ...]. Possiamo anche avvolgerlo in una funzione.

Sul lato vettoriale, il prodotto a croce è il prodotto antisimmetrico degli elementi, che ha anche una bella interpretazione geometrica.

In ogni caso, sarebbe meglio per darvi suggerimenti e farvi capire, ma che non è davvero il modo SO, quindi ...

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

grazie per il tag! – blur959

+7

Prego (ma non è necessario ringraziare ognuno di noi individualmente), tuttavia è possibile "accettare" una delle risposte - suggerimento, suggerimento, ... –

1

Se si desidera implementare il prodotto vettoriale voi stessi potrebbe vedere http://en.wikipedia.org/wiki/Vector_cross_product o un libro di matematica/fisica. In breve (a1, a2, a3) X (b1, b2, b3) = (a2 * b3-a3 * b2, a3 * b1-a1 * b3, a1 * b2-a2 * b1)

+0

grazie per le informazioni! Apprezzalo! – blur959

1

per più dimensioni questo potrebbe funzionare;

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

usando la ricorsione per questo? ... Sarebbe più elegante. – Sardathrion

1

vecchio, ma se qualcuno avrà mai bisogno di: ho fatto in questo modo:

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 
Problemi correlati