Я точно знаю, что мне известны концепции о десятичном представлении и предположительно соответствующие вопросы, такие как это , это и это и предлагаемые документация .
Все еще Я удивлен, что в Python3 round()
иногда возвращает целое число (согласно документации ) , а иногдачисло с плавающей точкой (странно для меня), в зависимости от незначительной разницы в типе его первого аргумента .
Я понимаю, что, например, floor()
или ceil()
всегда возвращают число с плавающей точкой, и, конечно, я нашел разумным, что round(x, digits)
возвращает целое число или число с плавающей точкой в зависимости от второгоуказывается параметр digits
или нет, и даже существуют различные реализации round
(например, builtin
и numpy
one).
В частности, следующий код показывает, что float32
и numpy.float32
делают round()
возвращают различные типы :
>>> x=101/100
>>> x
1.01
>>> import numpy as np
>>> nx=np.float32(x)
>>> nx
1.01
>>> round(x)
1
>>> round(nx)
1.0
Для любопытных яполучить мое значение x
в качестве предсказания модели классификации в Keras, и необходимо получить из него индекс путем округления до ближайшего целого числа, чтобы выбрать правильную метку из списка строк.
И поиск в StackOverflow / Stackexchange не показывает, что вопрос уже был обработан.Пожалуйста, дайте мне полезную ссылку в случае.
Чтобы быть более точным, я получаю предсказанное значение из классификатора нейронной сети, то есть число приближается к 0 или 1 или другому целому числу, и хочу использовать егов качестве индекса для печати правильной метки, связанной с прогнозом (это должно быть почти базовой потребностью).
Решение довольно простое, хотя и некрасивое: int(round(x))
(также объяснено здесь );но я все еще считаю, что это своего рода обходной путь к нежелательному поведению.
Я знаю, что , почему это работает, поэтому вопросов не ценят, поэтому давайте спросим , что такое правильный питонический способ получить это целое число и эту метку из значения numpy.float32
, в надежде, что кто-то обнародует также интересное обоснование этой ... эм ... функциональности.