python - 在 Numpy 中选择区间索引

假设您有一些 1d- numpy 数组,例如 arr = np.array([0,0,0.2,0.6,1,1,0.7,0.3,0,0])

这里如果是 fn(arr, arr > 0.5) => [(3,6)] < - values 大于给定 value 的区间索引。每行也可以有多个间隔,因此输出 [(3,6),[300,302]...] 也是可能的。

是否可以进行单行或任何简短的书面和最佳 Numpy 操作来获取具有特定条件的区间索引?

回答1

尝试:

arr = np.array([0, 0, 0.2, 0.6, 1, 1, 0.7, 0.3, 0, 0])

ranges = np.where(np.diff(arr > 0.5, prepend=0, append=0))[0].reshape(-1, 2)
ranges[:, 1] -= 1

print(ranges)

印刷:

[[3 6]]

为了:

arr = np.array([0.6, 0.7, 0, 0, 0.8, 0.9])

印刷:

[[0 1]
 [4 5]]