Np.set_printoptions () только для целей отображения? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть следующий код:

import numpy as np

float_number_1 = -0.09115307778120041
float_number_2 = -0.41032475233078003
print(float_number_1)                              #-0.09115307778120041
print(float_number_2)                              #-0.41032475233078003

my_array= np.array([[float_number_1, float_number_2]], dtype=np.float64)
for number in my_array:
    print(number)                                           #[-0.09115308 -0.41032475]

Теперь, когда я добавляю следующее:

np.set_printoptions(precision=50)

и печатаю my_array снова, я получаю полные числа:

[-0.09115307778120041 -0.41032475233078003]

Является ли set_printoptions только для целей отображения или это влияет на фактическую точность чисел, хранящихся в массиве numpy?Мне нужно сохранить точность для целей расчета.

Кроме того, какую максимальную точность я могу установить для float64?

1 Ответ

1 голос
/ 19 сентября 2019

Да, это просто для отображения параметров.Формат хранения чисел не изменяется.Из документации numpy.set_printoptions() :

Эти параметры определяют способ отображения чисел с плавающей запятой, массивов и других объектов NumPy , отображаемых .

(выделение жирным шрифтом)

64-разрядное число с плавающей запятой имеет 53 бита значимости и точности , поэтому наименьшая двоичная дробь равна 2 ^ -52 или 2.220446049250313e-16;около 16 десятичных цифр, поэтому выход за пределы np.set_printoptions(precision=16), вероятно, не имеет особого смысла.

Обратите внимание, что настройка для floatmode также имеет значение;по умолчанию 'maxprec_equal', что означает, что количество отображаемых цифр зависит от фактических значений в вашем массиве;если вы установите precision=16, но все значения вашего массива могут быть однозначно представлены только с 4 десятичными знаками, то numpy не будет использовать больше.Только если floatmode установлен на 'fixed', он будет придерживаться большей точности.

В том, что означает уникально представляет числа с плавающей запятой: потому что числа с плавающей запятой аппроксимация с использованием двоичных дробей, существует целый ряд действительных чисел, все из которых приведут к одинаковому представлению с плавающей запятой, например, 0,5 и 0,50000000000000005 оба получат двоичное значение 00111111000000000000000000000000.Numpy стремится найти наименьшее количество десятичных цифр, которое может представлять число с плавающей запятой, а затем показать это вам.

...