【问题标题】:Repeat Numpy array by a sliding window通过滑动窗口重复 Numpy 数组
【发布时间】:2022-01-03 20:26:05
【问题描述】:

来自以下形状数组(6, 3)

>>> arr
[
    [1, 0, 1],
    [0, 0, 2],
    [1, 2, 0],
    [0, 1, 3],
    [2, 2, 1],
    [2, 0, 2]
]

我想根据n=4的滑动窗口重复这些值,给出一个形状为(6-n-1, n, 3)的新数组:

>>> new_arr
[
    [
        [1, 0, 1],
        [0, 0, 2],
        [1, 2, 0],
        [0, 1, 3]
    ],
    [
        [0, 0, 2],
        [1, 2, 0],
        [0, 1, 3],
        [2, 2, 1]
    ],
    [
        [1, 2, 0],
        [0, 1, 3],
        [2, 2, 1],
        [2, 0, 2]
    ]
]

使用循环相对简单,但在初始数组中有几百万个值(而不是本例中的 6 个)时会变得非常慢。

有没有更快的方法来使用 Numpy 原语到达new_arr

【问题讨论】:

    标签: python arrays numpy sliding-window


    【解决方案1】:

    您可以使用 NumPy,特别是 this 函数(仅 NumPy >= 1.20.0):

    from numpy.lib.stride_tricks import sliding_window_view
    
    new_arr = sliding_window_view(arr, (n, arr.shape[1])).squeeze()
    

    【讨论】:

    • 有没有办法使用 Numpy 1.19 来实现这一点?由于某种原因,Numpy >= 1.20 与 TensorFlow 存在依赖冲突。
    • sliding_window_viewnumpy 1.20 中引入的numpy.lib.stride_tricks.as_strided 的更用户友好的替代品。请小心使用它。
    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 2022-01-06
    • 2017-09-03
    • 2018-01-25
    • 2018-03-03
    • 2015-12-16
    • 2020-08-08
    • 2017-09-23
    相关资源
    最近更新 更多