通过广播比较同一个 Numpy 数组的两个元素

Compare two elements of the same Numpy array through broadcasting

我有一个包含 2000 个元素的 numpy 数组,我想找出其中元素减去下一个元素除以自身大于 x 的索引。

类似于:

a[abs(a[i] - a[i+1])/a[i+1] > x]

我正在寻找一种通过广播而不是 for 循环来执行此操作的方法。

您可以使用切片。从包含除最后一个值以外的所有值的数组开始(因为最后一个没有下一个值可以与之比较),并使用布尔表达式对其进行索引:相同的数组,减去从索引 1 开始的移位数组,并除以移位数组。这些操作都会在 NumPy 中发生 element-wise。与x比较给出了可以用作过滤器的布尔数组:

a[:-1][np.abs(a[:-1] - a[1:]) / a[1:] > x]