python中相同计算的矛盾值
考虑以下两个结果python中相同计算的矛盾值,python,numpy,numbers,Python,Numpy,Numbers,考虑以下两个结果 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.040347517161295
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
两种计算方法是相同的,但结果有很大的差距。这里的问题是什么
如果这不是一个主观问题,那么建议使用哪一种?因为乘法和除法在Python中具有相同的优先级,Python从左到右读取它们 例如:
x, y, z = 2, 4, 8
这些是完全不同的:
x / y * z == x / (y * z)
>>>False
左侧为4.0,右侧为0.0625
附言:
括号具有最高优先级,可用于强制表达式按所需顺序求值
可能会帮助您理解Python是如何管理数字的。@hanugm您在第一个等式
((3/21)*(3/21))