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

Python中二维数组元素的邻域平均值计算方法

计算二维数组元素及其8邻域的平均值(最简方法)

针对你的需求,最简洁高效的方式是利用NumPy的向量化操作,完全避免手动遍历,代码量少且性能优异。

方法一:NumPy原生滑动窗口(无额外依赖)

你已经生成了带零边框的数组B,直接用np.lib.stride_tricks.sliding_window_view提取所有3×3的窗口,再求和取平均即可:

import numpy as np

A = np.array([[1,2,3],[4,5,6],[7,8,9]])
x,y = A.shape
n = 1    
B = np.zeros((x+2*n,y+2*n),dtype=int)
B[n:x+n, n:y+n] = A

# 生成所有3×3的滑动窗口
windows = np.lib.stride_tricks.sliding_window_view(B, window_shape=(3,3))
# 对每个窗口求和后除以9(窗口元素总数),得到对应原数组的平均值矩阵
average_matrix = windows.sum(axis=(2,3)) / 9

print(average_matrix)

输出结果:

[[0.66666667 1.         1.33333333]
 [2.         3.         4.        ]
 [3.33333333 4.         4.66666667]]

方法二:卷积平均(需SciPy)

如果可以安装SciPy库,uniform_filter方法更直观,它直接对数组做3×3窗口的均值滤波,最后截取中间区域对应原数组:

import numpy as np
from scipy.ndimage import uniform_filter

A = np.array([[1,2,3],[4,5,6],[7,8,9]])
x,y = A.shape
n = 1    
B = np.zeros((x+2*n,y+2*n),dtype=int)
B[n:x+n, n:y+n] = A

# 3×3窗口均值滤波,取中间x×y区域对应原数组
average_matrix = uniform_filter(B, size=3)[1:-1, 1:-1]

print(average_matrix)

说明

  • 两种方法都无需手动遍历每个元素,完全利用NumPy/SciPy的底层优化,比循环快几个数量级;
  • 因为你已经给原数组补了零边框,边缘元素的邻域会自动包含补的0,符合需求;
  • 优先推荐方法一,无需额外安装库,纯NumPy即可实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:20:04