#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]])