2016-10-21 22 views
0
import numpy as np 
import math 
print -1/2*np.log2(1/2)-1/2*np.log2(1/2) 

プリントnannumpyに問題がありますか?私はあなたが説明でき

を結果として見ることができませんか?

+0

はい: 'RuntimeWarning:log2でゼロで除算されます。 RuntimeWarning:double_scalarsで無効な値が発生しました。 ' – davedwards

+0

' 1/2'を '.5'に置き換えてみましょう:-.5 * np.log2(.5) - 。5 * np.log2(.5)' - > '1.0 ' – davedwards

答えて

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の間で変更されました

+0

この回答に追加された情報がなければ、無益です。 – sascha

+0

@saschaアップデートを見る、私は人々にドキュメントをチェックさせる – NaN

0

ints間のpython 2.xの分割はユークリッドの除算であるので、1/2は0、np.log(0)はnanを返します。パイソン2に対し

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.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 

Iは、Python 2の通常の分割を得るために二つの方法が含まれている:(1の代わりに、1)フロートを使ってPython 3を使用

または__futureからの除算をインポートする__

関連する問題