【发布时间】:2020-07-14 18:04:51
【问题描述】:
我正在尝试通过将矩阵与转置本身相乘来检查正交矩阵。
import numpy as np
matrix = np.array([[np.sqrt(2)/2, -np.sqrt(2)/2],
[np.sqrt(2)/2, np.sqrt(2)/2]])
dot = matrix.T.dot(matrix)
print(dot)
预期输出
[[1. 0.]
[0. 1.]]
相反,我得到了
[[ 1.00000000e+00 -4.26642159e-17]
[-4.26642159e-17 1.00000000e+00]]
我尝试使用不同的类型:float64、float128、complex128。但答案仍然不正确。
【问题讨论】:
-
dot.round(2) -
直到舍入误差,
-4.26642159e-17为 0。末尾的e-17表示“乘以 10 的 -17 次方”。 -
(a) 矩阵不是正交矩阵,因为
np.sqrt(2)/2不是两个的平方根;由于舍入为浮点格式,它有一个错误。所以测试正确地告诉你矩阵不是正交的。您可以测试它是否接近正交,可能通过测试矩阵及其转置的乘积是否接近单位矩阵。但是(b)您必须定义可接受的接近程度,以及定义“接近”的度量,并且(c)您必须接受测试会将一些非正交矩阵报告为正交矩阵。
标签: python numpy floating-point