Форматирование вывода массивов NumPy без научной нотации

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите преобразовать отображение массива NumPy, отключив научную нотацию и задав конкретную точность, то для этого вам подойдет функция numpy.set_printoptions. Настраиваем параметры suppress и formatter – и вот перед вами вывод данных с точностью до восьми знаков после запятой:

Python
Скопировать код
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 в формате чисел с плавающей точкой с фиксированной точностью до восьми знаков после запятой и без использования научной нотации.

Кинга Идем в IT: пошаговый план для смены профессии

Изысканные настройки для вашего массива: контролируем точность и форматирование

Иногда необходимо тонко подстроить отображение массива NumPy для того, чтобы продемонстровать свой профессионализм.

Задаем количество десятичных знаков

В случае с числами с плавающей точкой каждая деталь важна. Если вы хотите отобразить уровень точности, используя дополнительные нули, поможет аргумент formatter:

Python
Скопировать код
np.set_printoptions(precision=3, formatter={'float_kind': '{:0.3f}'.format}) # Стиль и точность, подобно костюму на заказ

Таким образом, каждое число обеспечивается точностью до заданного количества десятичных знаков. Вместо 1.2 вы получаете 1.200.

Временные изменения с помощью менеджеров контекста

Если вам необходимо временно изменить настройки без воздействия на общие параметры, используйте менеджер контекста numpy.printoptions:

Python
Скопировать код
with np.printoptions(precision=2, suppress=True):
    print(array)  # Массив представлен с временными настройками.
# После завершения блока with возвращаемся к обычным параметрам.

Такой подход позволяет ограничить действие настроек данным блоком кода, не влияя на остальную часть программы.

Симуляция менеджеров контекста для устаревших версий NumPy

Если у вас установлена версия NumPy до v1.15, которая не поддерживает функционал np.printoptions, можно создать собственный контроллер контекста custom_printoptions:

Python
Скопировать код
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.

Проработка деталей: демонстрация инструментов

Теперь давайте поглубже изучим способы тонкой настройки формата отображения массивов.

Ручное форматирование с помощью генератора списков

В случаях, когда требуется индивидуальный подход к каждому элементу массива, можно отказаться от глобальных параметров и подойти к вопросу основательно:

Python
Скопировать код
formatted_array = np.array([f'{x:.2f}' for x in array.flatten()]).reshape(array.shape) # Отдельный подход к каждому элементу!
print(formatted_array) # Каждое число в наилучшем виде.

Так каждое число в массиве будет представлено в уникальном формате.

Меняем "одежду" с помощью array2string

Чтобы иметь полный контроль над представлением элементов массива, пользуйтесь функцией np.array2string:

Python
Скопировать код
print(np.array2string(array, formatter={'float_kind': lambda x: f'{x:.2f}'}))

Она позволяет установить спецправила отображения элементов вашего массива в зависимости от их типа. Играйте в режиссеров на поле своих данных.

DecimalFormat для особо точного контроля

Моменты, когда нужен детальный контроль форматирования чисел, могут требовать использования Decimal:

Python
Скопировать код
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 позволяет достичь требуемого уровня точности и задать правила округления, что может быть недостижимо при работе с обычными числами с плавающей точкой. Идеальный выбор для задач, где велик вес точности.