Я пытаюсь найти эквивалентный pytorch (или C ++) для scipy.signal.argrelmax (), который находит пики в одномерном массиве с некоторыми отступами.https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.argrelmax.html
Вот то, что я придумал, и это быстрее, чем scipy.signal.argrelmax - но я упускаю быстрое решение для последнего шага, которое удаляет пики в каком-то окне.
import torch
# initalize an array (not the one in plot below)
gpu_max = torch.rand(100000)
# find peaks and troughs by subtracting shifted versions
gpu_temp1 = gpu_max[1:-1]-gpu_max[:-2]
gpu_temp2 = gpu_max[1:-1]-gpu_max[2:]
# and checking where both shifts are positive;
out1 = torch.where(gpu_temp1>0, gpu_temp1*0+1, gpu_temp1*0)
out2 = torch.where(gpu_temp2>0, out1, gpu_temp2*0)
# argrelmax containing all peaks
argrelmax_gpu = torch.nonzero(out2, out=None)+1
Таким образом, верхний график, который отмечает каждый relmaxpeak, довольно быстрый.Но нужен нижний - он исходит из scipy.signal.argrelmax () и использует временное окно 30-секундной выборки (т. Е. Он возвращает максимумы только в 60-минутном временном окне).
РЕДАКТИРОВАТЬ: я обновил код доотражает обновленный поиск torch.nonzero ().Но все же нужно выяснить, как сделать последний шаг (на рисунке ниже).