import numpy as np
import math
print -1/2*np.log2(1/2)-1/2*np.log2(1/2)
отпечатки nan
Что случилось с numpy? Я не могу видеть результат
Можете ли вы объяснить?
import numpy as np
import math
print -1/2*np.log2(1/2)-1/2*np.log2(1/2)
отпечатки nan
Что случилось с numpy? Я не могу видеть результат
Можете ли вы объяснить?
изменение питона версии, а Первый питон 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
В 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 __
Yep: 'RuntimeWarning: деление на ноль встречается в log2. RuntimeWarning: недопустимое значение, обнаруженное в double_scalars' – davedwards
Попробуйте заменить '1/2' на' .5': '-.5 * np.log2 (.5) -. 5 * np.log2 (.5)' -> '1.0 ' – davedwards