Когда я пытаюсь заменить часть массива numpy, ничего не происходит

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