我想用任意小的正x计算x ln x,或者x = 0而没有下溢或除零。我该怎么做呢?
我用google搜索“python numpy xlnx OR xlogx”没有任何有意义的结果。
x = 0
a = x * np.log(x)
b = np.log(np.power(x,x))
print(a,b)
for i in range(-30,30,10):
x = 10.**-i
a = x * np.log(x)
b = np.log(np.power(x,x))
print(a,b)
nan 0.0
6.90775527898e+31 inf
4.60517018599e+21 inf
230258509299.0 inf
0.0 0.0
-2.30258509299e-09 -2.30258512522e-09
-4.60517018599e-19 0.0
编辑添加: 这是造成我问题的另一个问题。但是计算xlogx的最佳方法是什么?当x = 0时,直接的方法会导致nans。
答案 0 :(得分:4)
您可以使用scipy中的xlogy函数执行此操作:
from scipy.special import xlogy
from numpy import log
>>> xlogy(10, 10)
23.0258509299
>>> 10 * log(10)
23.0258509299
>>> xlogy(0, 0)
0.0