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.

Два решения:

  1. Указать тип данных через параметр:

    y = np.array([0, 0, 0], dtype=float)

  2. Сразу задать дробные числа:

    y = np.array([0.0, 0.0, 0.0])

→ Ссылка