Python отказывается заменять элемент по индексу, если заменяемый элемент не целое число
Что то я впал в ступор:
import numpy as np
w = np.array([0.2, 0.1, 0.3])
y = np.array([0, 0, 0])
for j in range(3):
y[j] = w[j]
print('y[j] должно равняться:', w[j])
print('y равняется:', y)
y[0] должно равняться: 0.2
y равняется: [0 0 0]
Изменяю в массиве w первое число, на целое:
w = np.array([2, 0.1, 0.3])
y[0] должно равняться: -2.0
y равняется: [-2 0 0]
Что интересно w[1] и w[2] так же менять отказывается:
y[1] должно равняться: 0.1
y равняется: [2 0 0]
y[2] должно равняться: 0.3
y равняется: [2 0 0]
Что я делаю не так?
Ответы (1 шт):
np.array([0, 0, 0]) приводит тип элементов к ближайшем возможному типу данных, в данном случае это целые числа. При присваивании дробного числа целому, дробная часть отбрасывается. На самом деле, новое число присваивается, просто этого не видно, потому что исходное число 0 и присваивается 0. Замени 0.2 на 3.2, например, и присвоится 3.
Два решения:
Указать тип данных через параметр:
y = np.array([0, 0, 0], dtype=float)
Сразу задать дробные числа:
y = np.array([0.0, 0.0, 0.0])