Найти все максимумы в массиве numpy - PullRequest
1 голос
/ 22 апреля 2020

Я хочу найти все максимумы и их индекс в массиве numpy.

Я ищу что-то простое. Я начал что-то вроде data [1:] import numpy as np data = np.array([0,1,20,1,0,1,2,30,2,1,0]) A = data[1:] < data[:-1] РЕДАКТИРОВАТЬ: Argmax и findpeaks звучат сложно (найти пики дает вам минимум и максимум, например). Я сделал np.diff и al oop, и у меня есть индекс, хотя я стараюсь избегать использования l oop

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)

Спасибо

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Вы можете использовать numpy .argsort следующим образом:

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 :

from scipy.signal import find_peaks

idx = find_peaks(data)[0]
idx
array([2, 7], dtype=int64)
data[idx]
array([20, 30])
0 голосов
/ 22 апреля 2020

Вы можете попробовать ниже код

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 

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...