Мне любопытно, есть ли способ печати в формате numpy.arrays
, например, так:
x = 1.23456
print '%.3f' % x
Если я хочу напечатать число numpy.array
с плавающей точкой, он печатает несколько десятичных знаков, часто в «научном» формате, что довольно сложно прочитать даже для низкоразмерных массивов. Тем не менее, по- numpy.array
видимому, должен быть напечатан в виде строки, т %s
. Е. С. Есть ли решение для этого?
python
numpy
python-2.x
pretty-print
camillio
источник
источник
Ответы:
Вы можете использовать,
set_printoptions
чтобы установить точность вывода:И
suppress
подавляет использование научных обозначений для небольших чисел:Посмотрите документы для set_printoptions для других опций.
Чтобы применить параметры печати локально , используя NumPy 1.15.0 или более позднюю версию, вы можете использовать менеджер контекста numpy.printoptions . Например, внутри
with-suite
precision=3
иsuppress=True
установлены:Но за пределами параметров
with-suite
печати вернулись к настройкам по умолчанию:Если вы используете более раннюю версию NumPy, вы можете создать менеджер контекста самостоятельно. Например,
Чтобы предотвратить снятие нулей с конца поплавка:
np.set_printoptions
теперь естьformatter
параметр, который позволяет вам указать функцию форматирования для каждого типа.который печатает
вместо того
источник
print
, но вы можете использовать менеджер контекста, чтобы сделать что-то подобное. Я отредактировал пост выше, чтобы показать, что я имею в виду.np.set_printoptions(precision=3)
подавляете конечные нули .. как вы заставляете их так отображаться[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
?set_printoptions
если вы хотите строковое представление и не обязательно использоватьprint
. Вы можете просто вызвать__str__()
экземпляр массива numpy, и вы получите отформатированную строку в соответствии с заданными вами параметрами печати.Вы можете получить подмножество
np.set_printoptions
функций изnp.array_str
команды, которая применяется только к одному оператору печати.http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_str.html
Например:
источник
Унутбу дал действительно полный ответ (они тоже получили +1 от меня), но вот альтернатива лёгких технологий:
Как функция (используя
format()
синтаксис для форматирования):Использование:
Индекс массива доступен в строке формата:
источник
К вашему сведению, Numpy 1.15 (ожидаемая дата выпуска) будет включать контекстный менеджер для локальной настройки параметров печати . Это означает, что следующее будет работать так же, как соответствующий пример в принятом ответе (unutbu и Neil G), без необходимости писать собственный менеджер контекста. Например, используя их пример:
источник
Драгоценный камень, который делает слишком простым получение результата в виде строки (в сегодняшних маленьких версиях), скрыт в ответе Дениса:
np.array2string
источник
Годы спустя, еще один ниже. Но для повседневного использования я просто
источник
И вот что я использую, и это довольно просто:
источник
Был удивлен, что не увидел
around
упомянутый метод - значит, не возиться с опциями печати.источник
Я часто хочу, чтобы разные столбцы имели разные форматы. Вот как я печатаю простой 2D-массив, используя различные варианты форматирования, преобразовывая (кусочками) мой массив NumPy в кортеж:
источник
numpy.char.mod
может также быть полезным, в зависимости от деталей вашего приложения, например:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
вернет строковый массив с элементами «Value = 5.00», «Value = 5.10» и т. д. (как несколько надуманный пример).источник
У numpy-массивов есть метод,
round(precision)
который возвращает новый numpy-массив с элементами, округленными соответственно.источник
Я считаю, что обычный формат с плавающей точкой {: 9.5f} работает должным образом - подавляя электронные нотации с небольшими значениями - при отображении списка или массива с использованием цикла. Но этот формат иногда не в состоянии подавить электронную нотацию, когда у форматера есть несколько элементов в одном операторе печати. Например:
Мои результаты показывают ошибку в случаях 4, 5 и 6:
У меня нет объяснения этому, и поэтому я всегда использую цикл для плавающего вывода нескольких значений.
источник
я использую
Нетрудно изменить его для многомерных массивов.
источник
Еще один вариант - использовать
decimal
модуль:источник