Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python乘法浮点_Python_Numpy_Floating Point - Fatal编程技术网

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位是任意的,无法解释)。你的括号在上一次
舍入时是错误的(你仍然舍入了错误的矩阵)。