【发布时间】:2021-08-19 21:32:59
【问题描述】:
import numpy as np
from scipy.signal import argrelextrema
a = np.array([0,2,4,2,0,2,3,2,3,2,0])
def raycrit(a,thresh):
min_ind = argrelextrema(a, np.less)
max_ind = argrelextrema(a, np.greater)
maxima = a[max_ind]
minima = a[min_ind]
if min_ind[0][0] > max_ind[0][0]:
for i in range(0,len(minima)):
if maxima[i] > thresh and maxima[i+1] > thresh:
if minima[i] > maxima[i]/2 and minima[i] > maxima[i+1]/2:
minima[i] = thresh
a[min_ind] = minima
return a
b = raycrit(a,2.5)
在上面的代码摘录中,我试图找到被局部最大值包围的局部最小值,它们的高度超过与其相邻的最高局部最大值的高度的一半。虽然这放入文本可能会令人困惑,但我认为阅读代码有助于理解我想要达到的目标。问题在于minima[i] = thresh 即使在触发条件时也保持不变。这里的结果应该是 [0,2,4,2,0,2,3,2.5,3,2,0] 但仍然是 [0,2,4,2,0,2,3,2,3,2 ,0] 我很困惑为什么......
【问题讨论】: