Ответ 1
Метод astype
работает хорошо:
>>> numpy.float64('6374.345407799015').astype(str)
'6374.345407799015'
Каков правильный/общепринятый способ печати и преобразования numpy.float64 в строку? Я заметил, что использование print
или str()
потеряет некоторую точность. Однако repr
поддерживает полную точность. Например:
>>> import numpy
>>> print numpy.float64('6374.345407799015')
6374.3454078
>>> print repr(numpy.float64('6374.345407799015'))
6374.3454077990154
Я предполагаю, что только вызов print превращается в вызов str()
объекта float64. Итак, __str__()
для numpy.float64 реализован с чем-то вроде '%s' % (float(self))
или каким-то образом отбрасывает float64 с встроенным Python float()
? Я попытался быстро оглядеть источник numpy для этого, но не сразу понял, что происходит.
Я всегда думал, что repr()
должен возвращать действительный код Python, который может быть использован eval()
для повторного создания объекта. Это общепринятая конвенция? К счастью, в этом случае numpy не следует этому соглашению, потому что repr()
возвращает только необработанное число как строку, а не что-то вроде "numpy.float64('6374.345407799015')"
.
Итак, все это меня смущает. Каков правильный способ преобразования numpy.float64 в строку и/или ее печать, гарантируя, что вы всегда имеете одинаковую полную точность?
Метод astype
работает хорошо:
>>> numpy.float64('6374.345407799015').astype(str)
'6374.345407799015'
Посмотрите numpy.set_printoptions. В частности,
numpy.set_printoptions(precision=15)