У меня есть массив чисел:

y = np.random.rand(1000)

Я хочу найти максимальное значение y и затем взять каждый n-й элемент, начиная с позиции этого значения, как до, так и после появления этого максимального значения.

Кажется, я не могу вернуться в массив.

Я могу легко найти максимум и взять оттуда каждый n-й элемент:

idx = np.argmax(y)
newy = y[idx::reprate] # reprate is the number of points I want to skip

Это, однако, исключает все n-ые точки до idx, которые я все еще хочу получить.

Есть ли прямой путь, которого я не вижу?

2
Enzo 27 Июн 2019 в 16:18

3 ответа

Лучший ответ

Найти первый индекс вашего массива, который вы хотите сохранить, - простая математика: idx % reprate

newy = y[idx%reprate::reprate]
2
glibdud 27 Июн 2019 в 13:25

Просто добавьте негатив к вашему шагу, и это пойдет вспять.

Простой пример здесь. Это начнется с указанного вами индекса, а затем продвинется на 2 в обоих направлениях через итерируемое и затем в обратном направлении через итерируемое.

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[4::2]
[5, 7, 9]
>>> a[4::-2]
[5, 3, 1]
1
dfundako 27 Июн 2019 в 13:22

Вот вариант без NumPy:

import random
# Generating the random list
y = random.sample(range(1, 1000), 1000)
n = 3

# This will get the index of the max element
index = max(enumerate(y), key=lambda x: x[1])[0]

# This will get every `n` element
every_n_element = [y[(i + index) % len(y)] for i in range(0, len(y), n)]
print(every_n_element)
1
Error - Syntactical Remorse 27 Июн 2019 в 13:26