使用Python进行向量投影的计算

17

有没有更简单的命令来计算向量投影? 我现在使用的是以下方法:

x = np.array([ 3, -4,  0])
y = np.array([10,  5, -6])
z=float(np.dot(x, y))
z1=float(np.dot(x, x))
z2=np.sqrt(z1)
z3=(z/z2**2)
x*z3
2个回答

26

也许这正是你真正想要的:

np.dot(x, y) / np.linalg.norm(y)
这应该是向量x在向量y上的投影 - 请参阅https://en.wikipedia.org/wiki/Vector_projection。或者,如果您想计算将y投影到x上,那么请在上述等式的分母(norm)中用x替换y
编辑:正如@VaidAbhishek所评论的那样,上述公式是用于标量投影的。为了获得向量投影,请将标量投影乘以指向第一个向量被投影到的向量方向的单位向量。然后可以修改公式如下:
y * np.dot(x, y) / np.dot(y, y)

计算向量 x 在向量 y 上的投影。


4
这是标量投影。要得到向量投影,你需要将此(标量)乘以指向y方向的单位向量。 - VaidAbhishek
@VaidAbhishek 谢谢您!您是正确的。我已经编辑了我的答案。 - AGN Gazer

6
ab 上的投影定义为:

enter image description here

因此可以使用以下公式计算:

(np.dot(a, b) / np.dot(b, b)) * b

或者

(np.dot(a, b) / np.linalg.norm(b)**2 ) * b


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接