【问题标题】:Moving non-overlapping window in Numpy在 Numpy 中移动非重叠窗口
【发布时间】:2014-11-14 22:29:46
【问题描述】:

在 numpy 数组上移动窗口以使每个单独的块不与前一个块重叠并且块之间存在 1 个元素的间隙的最佳方法是什么?我想我应该使用 np.hstack,但我无法弄清楚切片模式。

基本上我要找的是这个:

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
result = np.array([[0, 1, 2, 3],
                   [5, 6, 7, 8])

谢谢!

【问题讨论】:

    标签: python arrays numpy slice


    【解决方案1】:

    您想在简短示例中实现的目标可以通过重塑数组来完成,然后删除最后一列以创建“间隙”。

    import numpy as np
    
    a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    # get length of flat array
    a_length, =  a.shape
    
    # reshape array 
    #(column by row must respect number of elements)
    b = a.reshape(( 2, a_length/2 ))
    
    # assign array except last column to a variable
    result = b[:,:-1]
    print result
    

    这是否足以回答您的问题?

    【讨论】:

    • 是的,它会的,谢谢你的想法。有趣的是,我已经对照skimage.util 模块中使用步幅的view_as_blocks 函数对其进行了检查,对于我的计算机上的 2000 个元素数组,它是 1.16 毫秒而不是 58 毫秒。
    • “2000 个元素的数组需要 1.16 毫秒而不是 58 毫秒”是什么意思?请记住,您的读者事先并不知道您的数据包含什么以及您将其用于什么目的。
    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多