Как красиво распечатать массив numpy.ar без научной записи и с заданной точностью? - PullRequest
268 голосов
/ 23 мая 2010

Мне любопытно, есть ли способ печати в формате numpy.arrays, например, способом, подобным следующему:

x = 1.23456
print '%.3f' % x

Если я хочу напечатать numpy.array с плавающей точкой,он печатает несколько десятичных знаков, часто в «научном» формате, который довольно трудно прочитать даже для низкоразмерных массивов.Тем не менее, numpy.array, очевидно, должен быть напечатан в виде строки, т. Е. С %s.Есть ли решение для этого?

Ответы [ 14 ]

1 голос
/ 03 февраля 2015

numpy.char.mod также может быть полезно, в зависимости от деталей вашего приложения, например: numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1)) вернет массив строк с элементами «Value = 5.00», «Value = 5.10» и т. Д. ( как несколько надуманный пример).

0 голосов
/ 06 июня 2018

Массивы numpy имеют метод round(precision), который возвращает новый массив numpy с элементами, округленными соответственно.

0 голосов
/ 10 апреля 2018

Был удивлен, что не увидел around упомянутый метод - означает, что не нужно вмешиваться в параметры печати. ​​

import numpy as np

x = np.random.random([5,5])
print(np.around(x,decimals=3))

Output:
[[0.475 0.239 0.183 0.991 0.171]
 [0.231 0.188 0.235 0.335 0.049]
 [0.87  0.212 0.219 0.9   0.3  ]
 [0.628 0.791 0.409 0.5   0.319]
 [0.614 0.84  0.812 0.4   0.307]]
0 голосов
/ 08 февраля 2018

Еще один вариант - использовать модуль decimal:

import numpy as np
from decimal import *

arr = np.array([  56.83,  385.3 ,    6.65,  126.63,   85.76,  192.72,  112.81, 10.55])
arr2 = [str(Decimal(i).quantize(Decimal('.01'))) for i in arr]

# ['56.83', '385.30', '6.65', '126.63', '85.76', '192.72', '112.81', '10.55']
...