获取numpy 1d数组的索引,其中value大于前一个元素

时间:2015-01-28 15:18:25

标签: python arrays numpy

假设我生成了1d numpy数组:

r=np.random.randint(0,10,(10,))

给予,例如:

array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])

我可以找到元素大于前一个(左边的元素)的索引,如下所示:

for x in range(r.shape[0]):
    if r[x]>r[x-1]:
        p[x]=1
    else:
        p[x]=0
np.where(p==1)[0]

,并提供:

array([1, 2, 3, 5, 8, 9])

有更好的方法吗?

2 个答案:

答案 0 :(得分:6)

您可以numpy.diff使用numpy.where

>>> arr = np.array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])
>>> np.where(np.diff(arr) > 0)[0] + 1
array([1, 2, 3, 5, 8, 9])

答案 1 :(得分:0)

另一种方法是使用数组切片:

>>> arr = np.array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7])
>>> np.where(np.r_[False, arr[1:] > arr[:-1]])[0]
array([1, 2, 3, 5, 8, 9])

您将阵列向右移动并将其与自身进行比较。结果的长度比原始数组短。由于第一个值无法与其左边的值进行比较,因此将第一个结果设置为false。