Смущенный пандами dtype преобразование в np.float16 значение 2053 становится 2052 - PullRequest
4 голосов
/ 27 апреля 2019

Я пытался уменьшить потребление памяти, уменьшая типы данных с плавающей запятой.

Я проверил диапазон np.float16:

np.finfo(np.float16)
finfo(resolution=0.001, min=-6.55040e+04, max=6.55040e+04, dtype=float16)

Это показывает -6.55040e+04 < 2053 < 6.55040e+04

Сейчас:

s = pd.Series([2051,2052,2053,2054])
s.astype(np.float16)

0    2052.0
1    2052.0
2    2052.0
3    2054.0

Почему это так?

ОБНОВЛЕНИЕ
Заимствование документации у np.finfo

numpy.finfo
class numpy.finfo[source]
Machine limits for floating point types.

Parameters: 
dtype : float, dtype, or instance

Kind of floating point data-type about which to get information.

Attributes

eps (float) The smallest representable positive number such that 1.0 + eps != 1.0. Type of eps is an appropriate floating point type.
epsneg  (floating point number of the appropriate type) The smallest representable positive number such that 1.0 - epsneg != 1.0.
iexp    (int) The number of bits in the exponent portion of the floating point representation.
machar  (MachAr) The object which calculated these parameters and holds more detailed information.
machep  (int) The exponent that yields eps.
max (floating point number of the appropriate type) The largest representable number.
maxexp  (int) The smallest positive power of the base (2) that causes overflow.
min (floating point number of the appropriate type) The smallest representable number, typically -max.
minexp  (int) The most negative power of the base (2) consistent with there being no leading 0’s in the mantissa.
negep   (int) The exponent that yields epsneg.
nexp    (int) The number of bits in the exponent including its sign and bias.
nmant   (int) The number of bits in the mantissa.
precision   (int) The approximate number of decimal digits to which this kind of float is precise.
resolution  (floating point number of the appropriate type) The approximate decimal resolution of this type, i.e., 10**-precision.
tiny    (float) The smallest positive usable number. Type of tiny is an appropriate floating point type.

1 Ответ

2 голосов
/ 27 апреля 2019

Речь идет не о min или max, которые определяют самые низкие и самые высокие значения, которые float16 может принимать соответственно, но resolution или о наименьшей разнице между двумя значениями, прежде чем они будут считаться идентичными.

finfo показывает, что разрешение float16 равно 0.001, или 4 значащим цифрам.Цифра 2 в вашем случае является четвертой значащей цифрой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...