2009-12-31 7 views
13

Как рассчитать кросс-произведение двух векторов без использования библиотек программирования?Перекрестное произведение двух векторов в Python

например, данные векторы 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

Если вы не отвечаете требованиям, у Пола есть точка: Если вам нужны такие вещи, вы действительно * должны * смотреть в numpy! Кроме того, если вы играете с 3D-векторами в своих исследованиях, проверьте VPython - он делает визуализацию этих вещей чрезвычайно легкой и интересной. –

33

вы спрашиваете о формуле для сечения продукта? Или как сделать индексацию и списки в python?

Основная идея заключается в том, что вы получаете доступ к элементам a и b как [0], [1], [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

Если вы хотите реализовать перекрестную продукт себе вас может видеть http://en.wikipedia.org/wiki/Vector_cross_product или математику/книгу физики. Вскоре (а1, а2, а3) Х (b1, b2, b3) = (а2 * Б3-а3 * 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 (и, 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 
Смежные вопросы