Коротко
print(a)показывает[1. 2. 3.], а repr (последняя строка в Jupyter) —array([1., 2., 3.]).- В NumPy 2 repr скаляра выглядит как
np.float64(0.3): так видно, что это тип NumPy, а неfloat. - Настройки влияют только на отображение, данные не меняются.
np.printoptions(...)в блокеwithменяет настройки временно — так лучше, чем глобальныйnp.set_printoptions.- Массивы длиннее
threshold(по умолчанию 1000) печатаются сокращённо, через....
В этом справочнике
Перед каждым примером выполняются одни и те же настройки, чтобы вывод на сайте совпадал на любой машине. Для NumPy это значения по умолчанию, заданные явно:
np.set_printoptions(linewidth=75, precision=8, threshold=1000, edgeitems=3)Настройки pandas — в статье pandas: настройки отображения.
Синтаксис
np.set_printoptions(precision=8, suppress=False, threshold=1000,
edgeitems=3, linewidth=75, legacy=False)
with np.printoptions(precision=3): # те же параметры, только внутри блока
print(a)
np.get_printoptions() # текущие значенияПараметры
ПараметрЧто делаетПо умолчанию
precisionсколько знаков после запятой показывать у float8suppressTrue — не использовать научную запись для маленьких чиселFalsethresholdсколько элементов можно показать целиком; больше — сокращение1000edgeitemsсколько элементов показывать с каждого края при сокращении3linewidthширина строки в символах, после которой идёт перенос75legacyвид вывода старой версии, например '1.25'FalseПримеры
a = np.array([1.5, 2, 3])
print(a) # print — для людей
a # repr — как это записать в кодеВывод
[1.5 2. 3. ] array([1.5, 2. , 3. ])
x = np.float64(0.1) * 3
print(x)
xВывод
0.30000000000000004 np.float64(0.30000000000000004)
thirds = np.array([1 / 3, 2 / 3, 1.0])
with np.printoptions(precision=3):
print(thirds)
print(thirds) # вне блока with — снова как обычноВывод
[0.333 0.667 1. ] [0.33333333 0.66666667 1. ]
values = np.array([0.00001, 1.5, 2500.0])
print(values)
with np.printoptions(suppress=True):
print(values)Вывод
[1.0e-05 1.5e+00 2.5e+03] [ 0.00001 1.5 2500. ]
np.arange(2000) # больше 1000 элементов — показываются только краяВывод
array([ 0, 1, 2, ..., 1997, 1998, 1999], shape=(2000,))
Подводные камни
precision не округляет данные
Видимые цифры — это только отображение: сумма и сравнения используют полные значения. Округлить сами данные — np.round.
prices = np.array([10.123, 20.456])
with np.printoptions(precision=1):
print(prices)
print(prices.sum()) # скаляр печатается полностью
prices[0] # данные не округленыВывод
[10.1 20.5] 30.579 np.float64(10.123)
Вывод np.float64(...) в старом коде выглядел иначе
Если старый вывод нужен, например чтобы не переписывать doctest, есть legacy="1.25".
with np.printoptions(legacy="1.25"):
print(repr(np.float64(0.5)))Вывод
0.5