Форматирование вывода массивов NumPy без научной нотации
Быстрый ответ
Если вы хотите преобразовать отображение массива NumPy, отключив научную нотацию и задав конкретную точность, то для этого вам подойдет функция numpy.set_printoptions
. Настраиваем параметры suppress и formatter – и вот перед вами вывод данных с точностью до восьми знаков после запятой:
import numpy as np
# Создаем случайный массив NumPy
array = np.random.random(5)
# Настраиваем параметры печати: отключаем научную нотацию и фиксируем точность в восемь знаков после запятой
np.set_printoptions(precision=8, suppress=True, formatter={'all': lambda x: f'{x:0.8f}'})
print(array) # Теперь вывод данных выглядит как нужно!
В результате мы получаем вывод массива NumPy в формате чисел с плавающей точкой с фиксированной точностью до восьми знаков после запятой и без использования научной нотации.
Изысканные настройки для вашего массива: контролируем точность и форматирование
Иногда необходимо тонко подстроить отображение массива NumPy для того, чтобы продемонстровать свой профессионализм.
Задаем количество десятичных знаков
В случае с числами с плавающей точкой каждая деталь важна. Если вы хотите отобразить уровень точности, используя дополнительные нули, поможет аргумент formatter
:
np.set_printoptions(precision=3, formatter={'float_kind': '{:0.3f}'.format}) # Стиль и точность, подобно костюму на заказ
Таким образом, каждое число обеспечивается точностью до заданного количества десятичных знаков. Вместо 1.2
вы получаете 1.200
.
Временные изменения с помощью менеджеров контекста
Если вам необходимо временно изменить настройки без воздействия на общие параметры, используйте менеджер контекста numpy.printoptions
:
with np.printoptions(precision=2, suppress=True):
print(array) # Массив представлен с временными настройками.
# После завершения блока with возвращаемся к обычным параметрам.
Такой подход позволяет ограничить действие настроек данным блоком кода, не влияя на остальную часть программы.
Симуляция менеджеров контекста для устаревших версий NumPy
Если у вас установлена версия NumPy до v1.15, которая не поддерживает функционал np.printoptions
, можно создать собственный контроллер контекста custom_printoptions
:
from contextlib import contextmanager
@contextmanager
def custom_printoptions(*args, **kwargs): # Личная настройка на высшем уровне!
original_options = np.get_printoptions() # Сохраняем текущие параметры
np.set_printoptions(*args, **kwargs) # Применяем изменения
try:
yield
finally:
np.set_printoptions(**original_options) # Возвращаем исходные параметры
with custom_printoptions(precision=2, suppress=True):
print(array) # На сцене – массив в нашем выбранном стиле.
Применяя эти подходы, можно максимально гибко настроить визуализацию массивов NumPy.
Проработка деталей: демонстрация инструментов
Теперь давайте поглубже изучим способы тонкой настройки формата отображения массивов.
Ручное форматирование с помощью генератора списков
В случаях, когда требуется индивидуальный подход к каждому элементу массива, можно отказаться от глобальных параметров и подойти к вопросу основательно:
formatted_array = np.array([f'{x:.2f}' for x in array.flatten()]).reshape(array.shape) # Отдельный подход к каждому элементу!
print(formatted_array) # Каждое число в наилучшем виде.
Так каждое число в массиве будет представлено в уникальном формате.
Меняем "одежду" с помощью array2string
Чтобы иметь полный контроль над представлением элементов массива, пользуйтесь функцией np.array2string
:
print(np.array2string(array, formatter={'float_kind': lambda x: f'{x:.2f}'}))
Она позволяет установить спецправила отображения элементов вашего массива в зависимости от их типа. Играйте в режиссеров на поле своих данных.
DecimalFormat для особо точного контроля
Моменты, когда нужен детальный контроль форматирования чисел, могут требовать использования Decimal
:
import decimal
from decimal import Decimal
decimal.getcontext().prec = 2
formatted_array = np.array([str(Decimal(str(x)).quantize(Decimal('1.00'))) for x in array]) # Точность контроля для особых случаев!
print(formatted_array)
Модуль Decimal
в Python позволяет достичь требуемого уровня точности и задать правила округления, что может быть недостижимо при работе с обычными числами с плавающей точкой. Идеальный выбор для задач, где велик вес точности.