我正在尝试使用 Scipy 进行正交向量计算:
import numpy as np
from scipy import linalg
e1 = np.float16([-0.913, -0.4072]).reshape(2,1)
e2 = linalg.orth(e1)
print(f'e_1 {e1} ,'
f' ortogonal e2 is {e2}')
我预期的输出是:
e2 is [[-0.4072] [0.913]]
我检查了一下:0.913 * -0.4072 + (-0.4072)*0.913 = 0
但收到:
e2 is [[-0.913] [-0.4072 ]]
我做错什么了?
阅读文档。您调用的函数不会计算给定向量的正交向量,而是计算给定向量集的正交基。您给它一个归一化向量,因此您只会得到相同的向量。
如果它只是在单个非零向量的平面上,则不需要 scipy,因为 (b, -a) 始终与 (a, b) 正交。否则可能有一个解,没有解或有多个解。该函数
linalg.null_space(e1.T)
为您提供所有可能的“正交向量”的正交基,即零空间。注意转置。