NumPy:查找数组中严格递增子序列的索引

hs1rzwqc  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(82)

我不想找到最大的增长序列。
我有一个类似于下面的NumPy数组:

[0, 1, 5, 2, 4, 8, 8, 6, 10]

字符串
我需要找到形成严格递增子序列的元素的索引,优先级为较早的索引。因此,对于上述输入,我希望输出为以下NumPy数组:

[0, 1, 2, 5, 8]


我想象一排代表建筑物高度的数字,我想找出我能从一端看到的建筑物的指数。
我可以很容易地通过数组元素的for循环来实现这一点,跟踪到目前为止看到的最大值。但我希望存在一个基于NumPy的一行解决方案,可以直接生成NumPy int数组。

vngu2lb8

vngu2lb81#

也许这个能帮上忙

x = [0, 1, 5, 2, 4, 8, 8, 6, 10]
u, idx = np.unique(np.maximum.accumulate(x), return_index=True)

字符串
或者更有效率

k = np.nonzero(np.diff(np.maximum.accumulate(x)))
idx = np.append(k[0][0],np.add(k,1))


其中idx给出索引

[0 1 2 5 8]

iqjalb3h

iqjalb3h2#

我不知道你是否认为这是“基于NumPy的”,但这个怎么样:

import numpy as np
arr = np.array([0,1,5,2,4,8,8,6,10])
np.array([i for i in range(len(arr)) if all(arr[:i] < arr[i])])

字符串

相关问题