You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中是否有类似MATLAB的二维数组方形滑动窗口函数?

Python中类似MATLAB的滑动窗口工具及二维方形窗口实现

一、替代MATLAB滑动窗口的常用工具

  • numpy.lib.stride_tricks.sliding_window_view(numpy 1.20+内置):最直接的内置替代方案,可快速生成任意维度的滑动窗口视图,基于数组 stride 机制无需复制数据,效率极高。
  • scipy.ndimage:其滤波类函数(如uniform_filter、median_filter)本质基于滑动窗口实现,但如果仅需提取窗口而非计算统计量,sliding_window_view更贴合需求。
  • skimage.util.view_as_windows:功能与numpy的sliding_window_view相近,在图像处理场景中常用。

二、二维数组方形窗口提取的高效实现

你当前的嵌套循环实现虽能完成功能,但在数组规模较大时效率偏低。以下是用内置/库函数实现的更优方案:

方法1:使用numpy内置的sliding_window_view

import numpy as np

median_x_array = median_coords_3d_array[:, :, 0]  # 提取x坐标
window_size = 3
padded_array = np.pad(median_x_array, pad_width=1, mode='wrap')

# 生成滑动窗口视图,无额外内存开销
windows = np.lib.stride_tricks.sliding_window_view(padded_array, window_shape=(window_size, window_size))
# 将每个窗口展平,与你原代码输出格式一致
median_x_neighbors = windows.reshape(-1, window_size * window_size).tolist()

方法2:使用scikit-image的view_as_windows

若已安装scikit-image,也可采用此方案:

import numpy as np
from skimage.util import view_as_windows

median_x_array = median_coords_3d_array[:, :, 0]
window_size = 3
padded_array = np.pad(median_x_array, pad_width=1, mode='wrap')

windows = view_as_windows(padded_array, (window_size, window_size))
median_x_neighbors = windows.reshape(-1, window_size * window_size).tolist()

注意事项

  • sliding_window_view是numpy 1.20版本后新增的功能,若使用低版本numpy,建议升级或改用view_as_windows。
  • 上述两种方法生成的均为原数组的视图,仅在调用.tolist()或显式复制时才会生成新数组,内存利用率远高于循环实现。

内容的提问来源于stack exchange,提问作者HBM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:40:05