Печать numpy.float64 с полной точностью

Каков правильный/общепринятый способ печати и преобразования 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 в строку и/или ее печать, гарантируя, что вы всегда имеете одинаковую полную точность?

Ответ 1

Метод astype работает хорошо:

>>> numpy.float64('6374.345407799015').astype(str)
'6374.345407799015'

Ответ 2

Посмотрите numpy.set_printoptions. В частности,

numpy.set_printoptions(precision=15)