Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中查找最大值_Python_Numpy_Scipy - Fatal编程技术网

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)