用numpy计算xlogx

HK *_*ong 6 python numpy logarithm

我想用任意小的正x来计算x ln x,或者x = 0而不会发生下溢或被零除。我该怎么做呢?

我用Google搜索“ python numpy xlnx或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
Run Code Online (Sandbox Code Playgroud)

编辑添加:这是导致我的问题的另一个问题。但是,计算xlogx的最佳方法是什么?当x = 0时,直接方法会导致nans。

cel*_*cel 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)

  • 好奇的人可以链接到[实现](https://github.com/scipy/scipy/blob/master/scipy/special/_xlogy.pxd)。 (2认同)