np.array中特定长度的连续部分的最小 - 最大差异

时间:2014-04-09 12:15:49

标签: python numpy

我有一个像这样的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的数组,所以这需要太长时间。

这样做的简单快捷方法是什么?

提前致谢!

1 个答案:

答案 0 :(得分:7)

在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