我有一个数字数组:
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
但是,这不包括我仍然想获得的idx
之前的所有第n个点。
有没有我看不到的简单方法?
答案 0 :(得分:2)
找到要保留的数组的第一个索引很简单:idx % reprate
newy = y[idx%reprate::reprate]
答案 1 :(得分:1)
只要在步幅上添加负数,就会倒退。
这里是一个简单的例子。这将从您提供的索引开始,然后跨2向前遍历可迭代对象,然后向后遍历可迭代对象。
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[4::2]
[5, 7, 9]
>>> a[4::-2]
[5, 3, 1]
答案 2 :(得分:1)
这里是不带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)