#python #numpy #numbers
#python #numpy #числа
Вопрос:
Рассмотрим следующие два результата
import numpy as np
(1/21) * np.log( (1/21) / (3/21) * (3/21))
что приводит к
-0.14497725893921062
и то же вычисление следующим образом
import numpy as np
x = 0.14285714285714285
y = 0.14285714285714285
xy = 0.047619047619047616
xy * np.log(xy / (x * y))
что приводит к
0.040347517161295414
Оба вычисления одинаковы, но в результатах так много пробелов. В чем здесь проблема?
И какой из них рекомендуется, если это не субъективный вопрос?
Комментарии:
1. Это может помочь вам понять, как Python управляет числами.
2. @hanugm вы пропускаете две скобки в первом уравнении
((3/21) * (3/21))
Ответ №1:
Поскольку умножение и деление имеют одинаковый приоритет в Python, а Python считывает их слева направо.
например:
x, y, z = 2, 4, 8
это совершенно разные:
x / y * z == x / (y * z)
>>>False
левая сторона равна 4.0, а правая сторона равна 0.0625
ps:
Круглые скобки имеют наивысший приоритет и могут использоваться для принудительного вычисления выражения в нужном вам порядке.