Вот минимальный пример:
import numpy as np
np.set_printoptions(linewidth=1000, precision=3)
# First attempt fails to limit the printed precision of x
x = np.array([None])
x[0] = 1/3
print(x)
# Second attempt succeeds
x = [None]
x[0] = 1/3
x = np.array(x)
print(x)
Запуск этого сценария дает
[0.3333333333333333]
[0.333]
Почему приведенная выше «Первая попытка» не может ограничить точность печати x
, а вторая попытка успешна?
🤔 А знаете ли вы, что...
Python является интерпретируемым языком программирования.
При запуске:
x = np.array([None])
x[0] = 1/3
print(x)
x
— это массив объектов (который содержит числа с плавающей запятой Python), а не массив с типом float, как в вашей второй попытке:
array([0.3333333333333333], dtype=object)
При этом игнорируются параметры печати.
Вы можете воспроизвести это просто с помощью:
print(np.array([1/3], dtype=object), np.array([1/3]))
Вывод: [0.3333333333333333] [0.333]
В качестве обходного пути преобразуйте массив в число с плавающей запятой:
print(x.astype(np.float64))
# [0.333]