首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找numpy数组上的所有最大值

问查找numpy数组上的所有最大值
EN

Stack Overflow用户
提问于 2020-04-22 15:15:45
回答 2查看 53关注 0票数 1

我想在一个numpy数组中找到所有的最大值和它们的索引。

我在找一些简单的东西。我开始类似于data1:< data:-1不知道如何获得20和30,以及它们的索引2和7。

代码语言:javascript
复制
import numpy as np

data = np.array([0,1,20,1,0,1,2,30,2,1,0])

A = data[1:] < data[:-1]

编辑:参数最大值和查找峰值听起来很难(例如,查找峰值会给出最小值和最大值)。我做了一个np.diff和一个循环,我有我的索引,尽管我尽量避免使用循环

代码语言:javascript
复制
import numpy as np

def maximum_index(data):  
    data = np.diff(data)
    index_max = []
    for index in range(len(data)-1):
        if data[index] > 0 and data[index+1] < 0:
            index_max.append(index+1)
    return np.asarray(index_max)


data = np.array([0,1,9,1,0,1,2,9,2,1,0])
result_max = maximum_index(data)

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-04-22 15:22:33

您可以按如下方式使用numpy.argsort:

代码语言:javascript
复制
import numpy as np

data = np.array([0,1,20,1,0,1,2,30,2,1,0])
N = 2 # number of maxima

idx = np.argsort(data)[-N:]
idx
array([2, 7], dtype=int64)
data[idx]
array([20, 30])

如果您不知道最大值的数量,您可以使用scipy.signal.find_peaks

代码语言:javascript
复制
from scipy.signal import find_peaks

idx = find_peaks(data)[0]
idx
array([2, 7], dtype=int64)
data[idx]
array([20, 30])
票数 2
EN

Stack Overflow用户

发布于 2020-04-22 15:36:46

你可以试试下面的代码

代码语言:javascript
复制
max_data_pos=np.argmax(data)        #Find position of max elelemt
max_data_val=data[max_data_pos]     #Find Max Valuse 

second_max_data_pos=np.argmax(np.delete(data,max_data_pos))  #Find position of second max elelemt
secondmax_data_val=data[second_max_data_pos]                 #Find Max Valuse 

​

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61359308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档