Python乘法浮点
我试图通过将矩阵乘以转置本身来检查矩阵是否为正交矩阵Python乘法浮点,python,numpy,floating-point,Python,Numpy,Floating Point,我试图通过将矩阵乘以转置本身来检查矩阵是否为正交矩阵 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
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。但答案仍然是错误的。这来自python对数字的除法。这是在二进制文件中完成的,它会产生这样的结果。您正在寻找
round()
函数
matrix = np.array([[round(np.sqrt(2)/2, 2), round(-np.sqrt(2)/2, 2)],
[round(np.sqrt(2)/2, 2), round(np.sqrt(2)/2), 2]])
dot.round(2)
直到舍入误差,-4.26642159e-17
为0。末尾的e-17
表示“乘以10的-17次方”。(a)矩阵不是正交的,因为np.sqrt(2)/2
不完全是2的平方根;由于四舍五入为浮点格式,它有一个错误。所以测试正确地告诉你矩阵不是正交的。您可以测试它是否接近正交,可能是通过测试矩阵及其转置的乘积是否接近单位矩阵。但是(b)您必须定义可接受的接近程度,以及定义“接近”的度量;(c)您必须接受测试将报告一些非正交矩阵为正交矩阵。看起来有一些语法错误。@Sushanth感谢您的指点,我输入了一个错误-我在电话上写,没有发现我错过了]
你的矩阵舍入错误(选择小数点后舍入2位是任意的,无法解释)。你的括号在上一次舍入时是错误的(你仍然舍入了错误的矩阵)。