Python中两个向量的交叉产物

时间:2009-12-31 10:13:42

标签: python

如何在不使用编程库的情况下计算两个向量的叉积?

给出了向量a = (1, 2, 3)b = (4, 5, 6)

5 个答案:

答案 0 :(得分:41)

你问的是交叉产品的配方吗?或者如何在python中做索引和列表?

基本思想是你将a和b的元素作为[0],[1],a [2]等(对于x,y,z)访问,并创建一个新的列表[element_0,element_1,...]。我们也可以将它包装在一个函数中。

在矢量方面,叉积是元素的反对称乘积,也有很好的几何解释。

无论如何,最好给你一些提示并让你搞清楚,但那不是真正的SO方式,所以......

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

答案 1 :(得分:30)

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

答案 2 :(得分:1)

如果您想自己实施跨产品,可能会看到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)

答案 3 :(得分: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

答案 4 :(得分:1)

我是这样做的:

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