加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – np.array中某个长度的连续部分的Min-Max差异

发布时间:2020-12-20 11:34:51 所属栏目:Python 来源:网络整理
导读:我有一个像这样的numpy值数组: a = np.array((1,3,4,5,10)) 在这种情况下,数组的长度为5.现在我想知道数组中最低值和最高值之间的差异,但仅在数组的某个连续部分内,例如长度为3. 因此,在这种情况下,它将是4和10之间的差异,所以6.具有连续部分的起始点的索引
我有一个像这样的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读