【问题标题】:Python multiplying floatPython乘以浮点数
【发布时间】: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


【解决方案1】:

这来自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]])

【讨论】:

  • 看起来有一些语法错误。
  • @Sushanth 谢谢你的指点,我打错了——我是用电话写的,没有看到我错过了]
  • 你舍入了错误的矩阵(并且选择舍入到小数点后 2 位是任意且无法解释的)。
  • 你的括号在最后一次round 调用中是错误的(你仍然四舍五入错误的矩阵)。
猜你喜欢
  • 2014-07-26
  • 2021-05-29
  • 2023-03-05
  • 1970-01-01
  • 2016-06-01
  • 2017-10-28
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多