Python умножение с плавающей запятой - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь проверить, ортонормирована ли матрица, умножая матрицу на транспонирование.

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. Но ответ все равно неверен.

1 Ответ

1 голос
/ 14 июля 2020

Это происходит от 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]])
...