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

отпечатки nanЧто случилось с numpy? Я не могу видеть результат

Можете ли вы объяснить?

+0

Yep: 'RuntimeWarning: деление на ноль встречается в log2. RuntimeWarning: недопустимое значение, обнаруженное в double_scalars' – davedwards

+0

Попробуйте заменить '1/2' на' .5': '-.5 * np.log2 (.5) -. 5 * np.log2 (.5)' -> '1.0 ' – davedwards

ответ

0

изменение питона версии, а Первый питон 2.7, второй питон 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

В python 2.x деление между ints является эвклидовым делением, поэтому 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: с помощью поплавка (1 вместо 1) или импортировать подразделение от __future __

Смежные вопросы