如何在不使用编程库的情况下计算两个向量的叉积?
给出了向量a = (1, 2, 3)
和b = (4, 5, 6)
答案 0 :(得分:41)
基本思想是你将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