numpy有什么问题?我看不到结果

时间:2016-10-21 01:52:40

标签: numpy math

import numpy as np
import math
print -1/2*np.log2(1/2)-1/2*np.log2(1/2)

打印nan

你能解释一下吗?

2 个答案:

答案 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导入除法__