Python 在列表中查找最大值
我想在列表中找到本地高点。如果一个顶点由几个相同的最大值组成,我想取第一个,忽略其余的Python 在列表中查找最大值,python,numpy,scipy,Python,Numpy,Scipy,我想在列表中找到本地高点。如果一个顶点由几个相同的最大值组成,我想取第一个,忽略其余的 from scipy.signal import argrelextrema import numpy as np data = np.array ([1,2,3,4,4,5,4,3,2,1,0,-1,4,5,6,7,7,7,6,5,4,3]) result = argrelextrema(data, np.greater_equal, order=3)[0] print (result) Output:
from scipy.signal import argrelextrema
import numpy as np
data = np.array ([1,2,3,4,4,5,4,3,2,1,0,-1,4,5,6,7,7,7,6,5,4,3])
result = argrelextrema(data, np.greater_equal, order=3)[0]
print (result)
Output:
[ 5 15 16 17]
预期产出:
[ 5 15]
任何其他解决方案和库都是可能的。不必使用scipy。
高性能解决方案受到赞赏,因为我的列表中有8万亿的价值。在我的第一稿中,我提出了如下建议:
up = False
tmp_idx = 0
tmp_val = 0
for idx, val in enumerate(a):
if idx == 0:
continue
if a[idx-1] == a[idx]:
if tmp_val != a[idx - 1]:
tmp_idx = idx-1
tmp_val = a[idx-1]
elif a[idx-1] < a[idx]:
up = True
elif a[idx-1] > a[idx] and up:
if tmp_val == a[idx-1]:
list.append(tmp_idx)
else:
list.append(idx-1)
up = False
使用
返回pleateaus中的中间峰值,其中提到的注释中的OP也是可以接受的
from scipy.signal import find_peaks
data = np.array ([1,2,3,4,4,5,4,3,2,1,0,-1,4,5,6,7,7,7,6,5,4,3])
result = find_peaks(data)[0]
#result: array([ 5, 16], dtype=int64)
[5, 17]
from scipy.signal import find_peaks
data = np.array ([1,2,3,4,4,5,4,3,2,1,0,-1,4,5,6,7,7,7,6,5,4,3])
result = find_peaks(data)[0]
#result: array([ 5, 16], dtype=int64)