2009-12-31 37 views
13

Làm cách nào để tính sản phẩm chéo của hai vectơ mà không cần sử dụng các thư viện lập trình?Sản phẩm chéo của hai vectơ trong Python

vectơ ví dụ cho a = (1, 2, 3)b = (4, 5, 6)

+5

Công thức cho các sản phẩm chéo có thể được tìm thấy tại http://mathworld.wolfram.com/CrossProduct.html. Hãy quay lại sau khi bạn đã đọc điều đó nếu bạn vẫn gặp sự cố lập trình. –

Trả lời

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

'mà không cần sử dụng thư viện lập trình' ... –

+0

xin lỗi vì điều đó. – fulmicoton

+7

Mặc dù không phải là câu trả lời cho các yêu cầu, Paul có một điểm: Nếu bạn cần những thứ như thế, bạn thực sự * nên * nhìn vào vũng nước! Ngoài ra, nếu bạn đang chơi với các vectơ 3D trong nghiên cứu của mình, hãy xem VPython - nó làm cho việc hình dung những thứ này cực kỳ dễ dàng và thú vị. –

33

các người hỏi về cách thức để sản phẩm chéo? Hoặc làm thế nào để làm lập chỉ mục và danh sách trong python?

Ý tưởng cơ bản là bạn truy cập các phần tử a và b dưới dạng [0], [1], [2], v.v. (cho x, y, z) và bạn tạo danh sách mới với [element_0, element_1, ...]. Chúng ta cũng có thể bọc nó trong một hàm.

Ở mặt vectơ, sản phẩm chéo là sản phẩm không đối xứng của các phần tử, cũng có cách diễn giải hình học tốt đẹp.

Dù sao, nó sẽ là tốt hơn để cung cấp cho bạn những gợi ý và để cho bạn con nó ra, nhưng đó không phải thực sự là cách SO, vì vậy ...

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

cảm ơn thẻ! – blur959

+7

Bạn được chào đón (nhưng không cần phải cảm ơn từng người một). Tuy nhiên, bạn có thể "chấp nhận" một trong những câu trả lời - gợi ý, gợi ý, ... –

1

Nếu bạn muốn thực hiện các sản phẩm chéo bản thân bạn có thể thấy http://en.wikipedia.org/wiki/Vector_cross_product hoặc sách toán/vật lý. Ngắn (a1, a2, a3) X (b1, b2, b3) = (a2 * b3-a3 * b2, a3 * b1-a1 * b3, a1 * b2-a2 * b1)

+0

cảm ơn thông tin! Đánh giá cao! – blur959

1

cho nhiều thứ nguyên , điều này có thể hoạt động;

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

bằng cách sử dụng đệ quy cho điều này? ... Nó sẽ thanh lịch hơn. – Sardathrion

1

cũ, nhưng nếu một số ai sẽ cần: tôi đã làm nó như thế này:

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 
Các vấn đề liên quan