2009-12-31 21 views
13

Programlama kütüphaneleri kullanılmadan iki vektörün çapraz çarpımını nasıl hesaplayabilirim?Python'da iki vektörün çapraz çarpımı

Örn verilen vektörler a = (1, 2, 3) ve b = (4, 5, 6)

+5

çapraz ürün için formül http://mathworld.wolfram.com/CrossProduct.html adresinde bulunabilir. Hala bir programlama probleminiz olduğunu okuduktan sonra geri gelin. –

cevap

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

'programlama kütüphaneleri kullanılmadan' –

+0

bunun için üzgünüm. – fulmicoton

+7

Gereksinimlere bir cevap olmasa da, Paul'un bir noktası vardır: Eğer bu tür şeylere ihtiyacınız varsa, gerçekten * bakmalıyız *! Ayrıca, çalışmalarınızda 3B vektörler ile oynuyorsanız, VPython'a bakın - bu şeyleri son derece kolay ve eğlenceli hale getirir. –

33

arası ürünün formül soruyorsunuz? Ya da python'da indeksleme ve listeler nasıl yapılır?

Temel fikir, a ve b öğelerine [0], a [1], a [2], vb. (X, y, z için) olarak erişmeniz ve yeni bir liste oluşturmanızdır. [element_0, element_1, ...] ile. Ayrıca bir fonksiyona da sarılabiliriz. Vektör tarafında, çapraz ürün, elementlerin antisimetrik ürünüdür ve bu da güzel bir geometrik yoruma sahiptir. Kendinizi sizi çapraz ürünü uygulamak istiyorsanız ...

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

etiketi için teşekkürler! – blur959

+7

Rica ederim (ama her birimize ayrı ayrı teşekkür etmenize gerek yok) Ancak, cevaplardan birini "kabul" edebilirsiniz - ipucu, ipucu, ... –

1

Neyse, size ipuçları vermek ve bunu anlamaya izin daha iyi olurdu, ama bu gerçekten SO yol değil, bu yüzden http://en.wikipedia.org/wiki/Vector_cross_product veya bir matematik/fizik kitabı görebilir. Kısa bir süre (a1, a2, a3) x (B1, B2, B3) = (a2 * b3-3-a * b2 a3 * b 1-a-1 * B3, A1 * b2-a2 * b 1), birden çok boyutlar için

+0

Bilgi için teşekkürler! Teşekkür ederiz! – blur959

1

Bu işe yarayabilir;

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

Bunun için özyineleme mi kullanıyorsunuz? ... Daha zarif olurdu. – Sardathrion

1

eski, ancak bazı biri eğer hiç gerekir: ben böyle yaptım:

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 
İlgili konular