Ответ 1
Чтобы сделать float-массивы numpy display в произвольном формате, вы можете определить пользовательскую функцию, которая принимает значение float в качестве своего ввода и возвращает форматированную строку:
In [1]: float_formatter = lambda x: "%.2f" % x
f
здесь означает формат с фиксированной запятой (не "научный" ), а .2
означает два десятичных знака (вы можете больше узнать о форматировании строк здесь).
Позвольте проверить его с помощью значения float:
In [2]: float_formatter(1.234567E3)
Out[2]: '1234.57'
Чтобы сделать numpy, напечатайте все массивы с плавающей точкой таким образом, вы можете передать аргумент formatter=
в np.set_printoptions
:
In [3]: np.set_printoptions(formatter={'float_kind':float_formatter})
Теперь numpy будет печатать все массивы с плавающей запятой следующим образом:
In [4]: np.random.randn(5) * 10
Out[4]: array([5.25, 3.91, 0.04, -1.53, 6.68]
Обратите внимание, что это влияет только на массивы numpy, а не на скаляры:
In [5]: np.pi
Out[5]: 3.141592653589793
Он также не будет влиять на неплавающие, сложные поплавки и т.д. - вам нужно будет определить отдельные форматы для других скалярных типов.
Вы также должны знать, что этот только влияет на то, как numpy отображает значения с плавающей точкой - фактические значения, которые будут использоваться в вычислениях, сохранят свою первоначальную точность.
Например:
In [6]: a = np.array([1E-9])
In [7]: a
Out[7]: array([0.00])
In [8]: a == 0
Out[8]: array([False], dtype=bool)
numpy печатает a
, как если бы он был равен 0
, но он не равен - он все равно равен 1E-9
.
Если вы действительно хотите округлить значения в своем массиве таким образом, который влияет на то, как они будут использоваться в вычислениях, вы должны использовать np.round
, как уже указывали другие.