Напомним, что kpsh
- это опция, которая переопределяет mpd
.Обычно, если выбран mpd
, вы можете видеть только один пик в любом данном сегменте длины 2*mpd
.Однако, если выбрано kpsh
, для пиков, имеющих одинаковую высоту, делается исключение, так как это ситуация связывания .
Теперь давайте проанализируем это:
(ind >= ind[i] - mpd) & (ind <= ind[i] + mpd)
part проверяет элемент FOR EACH ind
, находится ли он в mpd
окрестности ind[i]
, поэтому он возвращает логический массив того же размера, что и ind
.Я назову это arr_mpd
.Предположим на секунду, что нет kpsh
.Что произойдет, idel | arr_mpd
вернет True
для индексов i
, где ind[i]
уже имеет пик, определенный в его окрестности.Поэтому он отбрасывает ind[i]
, устанавливая idel[i]
в TRUE
, потому что позже, ind = np.sort(ind[~idel])
позаботится об их удалении.
Теперь давайте сосредоточимся на (x[ind[i]] > x[ind] if kpsh else True)
.Я собираюсь назвать это arr_kpsh
.
- Случай 1:
kpsh==False
делает arr_kpsh
массивом True
с.Поскольку операция bitwise_or выполняется с использованием &
, arr_mpd & arr_kpsh
сразу будет равен arr_mpd
, поэтому arr_kpsh
становится неэффективным, когда kpsh==False
. - Случай 2:
kpsh==True
гдемагия случается.x[ind[i]] > x[ind]
поэлементно проверяет, превышает ли значение пика, соответствующего ind[i]
, какие-либо другие индексы пика, найденные до этой точки.Если это так, то это означает, что это не одна и та же высота (нет необходимости проверять прямое равенство, поскольку пиковое значение может быть только больше).Если оно не больше, это означает, что есть еще один пик с той же высотой.Это переопределяет этот элемент от arr_mpd & arr_kpsh
до False
.Если этот элемент также ложен в idel
alraedy, то он будет сохранен, сохраняя при этом те же высоты, когда kpsh=True
.
Надеюсь, это поможет