Как найти первые локальные максимумы в массиве NumPy?

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

Итак, я искал по всему Интернету, но не могу найти, как это сделать без оператора for loop if . Допустим, у меня есть это как мой массив:

 import numpy as np

a = np.array([361, 362, 363, 364, 365, 0, 1, 2, 366, 367])

  

Я хочу выяснить, чтобы узнать первое наибольшее значение (независимо от того, будет ли в будущем другое более высокое значение), которое в данном случае было бы 365 . Вот как я бы это сделал, не используя numpy:

 import numpy as np

a = np.array([361, 362, 363, 364, 365, 0, 1, 2, 366, 367])

for element in range(a.shape[0]-1):
    if a[element 1] < a[element]:
        first_max = a[element]
        break

print(first_max)
# 365

  

Есть ли способ сделать это с помощью функции numpy?

Комментарии:

1. Dupe — более сложный вопрос без требования короткого замыкания

Ответ №1:

Один из способов — взять первые различия, найти первое отрицательное значение и получить его индекс, используя argmax :

 a[(np.diff(a) < 0).argmax()]
# 365
  

Хотя, в зависимости от сценария, генератор и короткое замыкание в первом совпадении могут быть лучше:

 next(v0 for i,(v0,v1) in enumerate(zip(a[:-1], a[1:])) if v0>v1)
# 365