import numpy as np
import math
print -1/2*np.log2(1/2)-1/2*np.log2(1/2)
打印nan
你能解释一下吗?
答案 0 :(得分:0)
也改变了python版本 第一个是python 2.7,第二个是python 3.5
>>> import numpy as np
>>> print(-1/2*np.log2(1/2)-1/2*np.log2(1/2))
nan
>>> print(-1/2*np.log2(1/2)-1/2*np.log2(1/2))
1.0
要求提供更多信息......
>>> import numpy as np
>>> print(-1/2*np.log2(1/2)-1/2*np.log2(1/2))
__main__:1: RuntimeWarning: divide by zero encountered in log2
__main__:1: RuntimeWarning: invalid value encountered in double_scalars
nan
现在可以通过浮动您的条款来避免这种情况......最简单的方法是直接进行...
>>> import numpy as np
>>> print(-1/2.*np.log2(1/2.)-1/2.*np.log2(1/2.))
1.0
相同的numpy版本,只是python在2.7和3.5之间发生了变化
答案 1 :(得分:0)
在python 2.x中,int之间的划分是欧几里德划分,所以1/2是0,np.log(0)返回nan。
使用python 3:
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul 2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
>>> 1/2
0.5
而在python 2中:
Python 2.7.12 |Continuum Analytics, Inc.| (default, Jul 2 2016, 17:42:40)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
>>> 1/2
0
>>> 1./2
0.5
>>> from __future__ import division
>>> 1/2
0.5
我已经在python 2中包含了两种获得普通除法的方法:使用float(1而不是1)或从__future导入除法__