如何正确计算两个向量的正交向量?
常见误区
很多人在使用SciPy
库计算正交向量时,会尝试使用linalg.orth()
函数,比如:
import numpy as np
from scipy import linalg
e1 = np.float16([-0.913, -0.4072]).reshape(2,1)
e2 = linalg.orth(e1)
这样做是错误的。为什么呢?因为linalg.orth()
函数的作用是计算给定向量集的标准正交基,而不是计算与给定向量正交的向量。当我们只输入一个向量时,它只会返回这个向量本身的归一化形式。
正确的做法
在二维平面中,计算正交向量其实很简单,有一个数学技巧:
- 对于向量(a, b),其正交向量可以是(b, -a)或(-b, a)
所以,对于上面的例子,正确的实现方式是:
import numpy as np
# 原始向量
e1 = np.array([-0.913, -0.4072])
# 计算正交向量
e2 = np.array([-0.4072, 0.913]) # 或者选择 [0.4072, -0.913]
# 验证正交性(点积应该接近0)
dot_product = np.dot(e1, e2)
print(f"点积结果:{dot_product}") # 应该非常接近0
如果你需要在更高维度空间中找正交向量,可以使用linalg.null_space()
函数:
import numpy as np
from scipy import linalg
e1 = np.array([-0.913, -0.4072]).reshape(1,2) # 注意这里需要转置
orthogonal_vectors = linalg.null_space(e1)