我有一个像这样的numpy值数组:
a = np.array((1, 3, 4, 5, 10))
在这种情况下,数组的长度为5.现在我想知道数组中最低值和最高值之间的差异,但仅在数组的某个连续部分内,例如长度为3.
因此,在这种情况下,它将是4和10之间的差异,所以6.具有连续部分的起始点的索引(在上面的示例中将是2)也是很好的.所以像这样:
def f(a, lenght_of_part):
...
return (max_difference, starting index)
我知道我可以遍历数组的切片部分,但是对于我的实际目的,我有~150k长度为1500的数组,所以这需要太长时间.
这样做简单快捷的方法是什么?
提前致谢!
最佳答案 在Numpy以矢量化方式完成这一点有点棘手.一种选择是使用numpy.lib.stride_tricks.as_strided,这需要小心,因为它允许访问任意内存.这是一个窗口大小为k = 3的示例:
>>> k = 3
>>> shape = (len(a) - k + 1, k)
>>> b = numpy.lib.stride_tricks.as_strided(
a, shape=shape, strides=(a.itemsize, a.itemsize))
>>> moving_ptp = b.ptp(axis=1)
>>> start_index = moving_ptp.argmax()
>>> moving_ptp[start_index]
6