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

5

假设我生成了一个1维的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个回答

8

您可以使用numpy.diffnumpy.where处理相关的IT技术内容:

>>> 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])

2
我会在代码中加上注释,解释为什么要使用 +1。因为这个操作可能一开始并不明显(或者即使过了6个月也不容易理解)。 - Félix Cantournet

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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接