Почему в Python предварительное выделение массива numpy не ограничивает его точность печати?

Вот минимальный пример:

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 является интерпретируемым языком программирования.


2
50
1

Ответ:

Решено

При запуске:

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]