np.array2string искажает значения? - PullRequest
3 голосов
/ 18 марта 2019

Я использую numpy и numpy.array2string для проверки влияния небольших изменений и численной стабильности.Я сбит с толку следующим упражнением:

<Get vector data through prior code>
print(data.shape)
print(data.dtype)
variance = np.var(data)
print(variance.dtype)
print(variance)
print(np.array2string(variance, suppress_small=True,formatter={'float': '{: 8.55f}'.format}))

, которое дает в качестве выходных данных:

torch.Size([1, 64])  # shape of the data
torch.float32        # dtype of the data
float32              # dtype of the variance result
37166410.0
37166408.0000000000000000000000000000000000000000000000000000000

Это приводит меня в замешательство: array2string не просто переформатирует значение с помощью (явно абсурдно)) число цифр, похоже, само значение изменяется намного выше точки, где ошибки округления должны иметь значение.(Кажется, не выглядит как средство форматирования, так как я могу удалить это и все еще видеть измененные значения.)

float32 может легко представлять любое из этих целочисленных значений напрямую.
Что я здесь не понимаю?Пожалуйста, подтвердите мою веру в объективную реальность.

ОБНОВЛЕНИЕ: Никакой float32 не может точно представлять 37166410.0, и мне нужны очки для чтения.

...