假设我有一个整数的NumPy数组,如下所示:
[34,2,3,22,22,22,22,22,22,18,90,5,-55,-19,22,6,6,6,6,6,6,6,6,23,53,1,5,-42,82]
我想找到数组的开始和结束索引,其中值的值大于重复的x倍(例如5倍)。因此,在上述情况下,其值为22和6。重复的22的开始索引为3,结束的索引为8。重复6相同。Python中是否有特殊的工具对您有所帮助?否则,我将遍历数组索引以获取索引,并将实际值与前一个进行比较。
问候。
使用@WarrenWeckesser在此处np.diff给出的和方法来查找数组中的零游程:
np.diff
import numpy as np def zero_runs(a): # from link iszero = np.concatenate(([0], np.equal(a, 0).view(np.int8), [0])) absdiff = np.abs(np.diff(iszero)) ranges = np.where(absdiff == 1)[0].reshape(-1, 2) return ranges a = [34,2,3,22,22,22,22,22,22,18,90,5,-55,-19,22,6,6,6,6,6,6,6,6,23,53,1,5,-42,82] zero_runs(np.diff(a)) Out[87]: array([[ 3, 8], [15, 22]], dtype=int32)
然后可以根据运行开始和结束之间的差异来过滤:
runs = zero_runs(np.diff(a)) runs[runs[:, 1]-runs[:, 0]>5] # runs of 7 or more, to illustrate filter Out[96]: array([[15, 22]], dtype=int32)