Нашли ошибку?
базовыйNumPy 2.5.3

Настройки отображения

Как NumPy печатает массивы и числа и как временно изменить точность, научную запись и сокращение длинных массивов.

Нужно знать:Что такое NumPy

Содержание статьи

Коротко

  • 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сколько знаков после запятой показывать у float8
suppressTrue — не использовать научную запись для маленьких чиселFalse
thresholdсколько элементов можно показать целиком; больше — сокращение1000
edgeitemsсколько элементов показывать с каждого края при сокращении3
linewidthширина строки в символах, после которой идёт перенос75
legacyвид вывода старой версии, например '1.25'False

Примеры

print и repr
a = np.array([1.5, 2, 3])
print(a)          # print — для людей
a                 # repr — как это записать в коде
Вывод
[1.5 2.  3. ]
array([1.5, 2. , 3. ])
Скаляр NumPy
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".

Старый вид repr
with np.printoptions(legacy="1.25"):
    print(repr(np.float64(0.5)))
Вывод
0.5