#python #arrays #numpy #indexing
Вопрос:
У меня есть следующий код
currSub-это фрейм данных длиной 2850, и я извлекаю временные метки (числа от 1 до 2850) и вектор вероятностей одинаковой длины.
Моя цель состоит в том, чтобы поместить векторную задачу внутри векторной перестройки, начиная с позиции 50 и оставляя остальные нули неизменными.
Когда я запускаю любую из последних двух строк, просто ничего не происходит вообще. Может ли кто-нибудь объяснить, почему ценности не меняются?
alignPoint = 50
x = np.arange(0,3000)
subTimes = np.arange(2850)/2
subProb = np.ones(2850)-0.5
realign = np.zeros_like(x)
sTRe = np.arange(alignPoint,alignPoint len(subTimes)).astype(int)
realign[alignPoint:alignPoint len(subTimes)] = subProb
np.put(realign,sTRe,subProb)
Комментарии:
1. У вас есть
subProb
, но нетcurrSub
илиcurrProb
.
Ответ №1:
realign
имеет dtype int64
. Когда вы присваиваете ему значения с плавающей запятой, они преобразуются в целочисленный тип, что означает, что они округляются в меньшую сторону.
Поскольку subProb
содержит 0,5, вы заменяете существующие значения 0 новыми значениями 0.
Чтобы избежать этого, создайте realign
с тем же типом dtype, что и subProb
:
realign = np.zeros_like(x, dtype=subProb.dtype)