#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