Проблемы с сохранением массива в столбцах

#python #slice

#python #срез

Вопрос:

У меня есть следующий код:

 dvbydt = np.full([3,N],0)
dvbydt[:,0] = np.array([-1.47813483e-03, -2.23682946e-03, -1.06122312e-05])
 

У меня создалось впечатление, что это сохранит весь первый столбец в виде массива с тремя значениями в правой части, но он все равно возвращает массив со всеми 0. Что я делаю не так? Ошибок не возникает, и они имеют одинаковую форму, но, похоже, ничего не сохраняется в массиве dvbydt. Любая помощь очень ценится

Ответ №1:

Если вы проверяете тип записей, они являются целыми числами:

 type(dvbydt[0][0])
# numpy.int32
 

Итак, это работает, оно просто приближает их к ближайшему целому числу, которое равно 0.

При определении массива используйте 0.0 вместо 0 :

 N = 3
dvbydt = np.full([3,N],0.0)
dvbydt[:,0] = np.array([-1.47813483e-03, -2.23682946e-03, -1.06122312e-05])

dvbydt
# array([[-1.47813483e-03,  0.00000000e 00,  0.00000000e 00],
#       [-2.23682946e-03,  0.00000000e 00,  0.00000000e 00],
#       [-1.06122312e-05,  0.00000000e 00,  0.00000000e 00]])
 

В качестве альтернативы, укажите dtype в аргументах массива:

 N = 3
dvbydt = np.full([3,N],0, dtype=float)
dvbydt[:,0] = np.array([-1.47813483e-03, -2.23682946e-03, -1.06122312e-05])

dvbydt
# array([[-1.47813483e-03,  0.00000000e 00,  0.00000000e 00],
#       [-2.23682946e-03,  0.00000000e 00,  0.00000000e 00],
#       [-1.06122312e-05,  0.00000000e 00,  0.00000000e 00]])