Получить каждый n-й элемент списка, начиная с максимального значения - PullRequest
2 голосов
/ 27 июня 2019

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

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, которые я все еще хочу получить.

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

Ответы [ 3 ]

2 голосов
/ 27 июня 2019

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

newy = y[idx%reprate::reprate]
1 голос
/ 27 июня 2019

Вот вариант без 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 голос
/ 27 июня 2019

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

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

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[4::2]
[5, 7, 9]
>>> a[4::-2]
[5, 3, 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...