2009-12-31 3 views
13

프로그래밍 라이브러리를 사용하지 않고 두 벡터의 외적을 어떻게 계산할 수 있습니까?파이썬에서 두 벡터의 교차 곱

예컨대 주어진 벡터 a = (1, 2, 3)b = (4, 5, 6)

+5

십자가 제품에 대한 공식 http://mathworld.wolfram.com/CrossProduct.html에서 확인할 수 있습니다. 프로그래밍 문제가있는 경우 읽은 후에 다시 오십시오. –

답변

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

'프로그래밍 라이브러리를 사용하지 않고 ... –

+0

죄송합니다. – fulmicoton

+7

요구 사항에 대한 대답이 아니지만 폴은 다음과 같은 점을 가지고 있습니다. 그런 종류가 필요한 경우 정말로 *해야합니다! 또한 연구에서 3D 벡터를 사용하고 있다면 VPython을 확인하십시오.이 기능을 사용하면 매우 쉽고 재미있게 시각화 할 수 있습니다. 정보를 주셔서 감사합니다. –

33

당신은 십자가 제품에 대한 공식에 대해 물어? 또는 파이썬에서 색인 생성 및 목록을 만드는 방법?

기본 아이디어는 a와 b의 요소를 [0], a [1], a [2] 등 (x, y, z의 경우)으로 액세스하고 새 목록을 작성한다는 것입니다 [element_0, element_1, ...]과 함께 또한 함수로 래핑 할 수도 있습니다.

벡터 측면에서 교차 곱은 요소의 반대쪽 대칭 곱이며 멋진 기하학적 해석을 제공합니다. 당신은 자신을 십자가 제품을 구현하려면 ...

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

태그를 주셔서 감사합니다! – blur959

+7

당신은 환영합니다. (그러나 각자 개별적으로 감사 할 필요는 없습니다.) 그러나 힌트, 힌트, 대답 중 하나를 "받아 들일 수"있습니다 ... –

1

어쨌든, 당신에게 힌트를 줄 당신이 그것을 알아낼 수 있도록 더 나은 것,하지만 정말 SO의 방법이 아니다, 그래서 http://en.wikipedia.org/wiki/Vector_cross_product 또는 수학/물리 도서를 참조하십시오. 곧 (A1, A2, A3) X (B1, B2, B3) = (A2 * B3-A3의 *를 B2, A3 * B1-A1의 *의 B3, A1 * B2-A2의 *의 B1) 여러 치수

+0

감사합니다. 고마워요! – blur959

1

, 이것은 작동 할 수 있습니다;

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

어때요? 이 재귀를 사용하여? ... 그것은 더 우아한 것입니다. – Sardathrion

1

오래된,하지만 어떤 하나가 지금 필요합니다 나는 이런 식으로했다 :

데프 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 
관련 문제