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

如何查找二维NumPy数组中值为1的块区域的中心位置

解决方案

你现有的逻辑是判断以当前坐标为中心的3×3邻域所有值均为1,我们可以通过向量化操作完全替代Python层面的循环,实现效率的大幅提升,下面给出两种实现方案:

方案1:基于scipy卷积实现(代码最简洁)

直接用3×3全1核对原数组做二维卷积,卷积结果等于9的位置就是目标中心:

import numpy as np
from scipy.signal import convolve2d

kernel = np.ones((3, 3), dtype=np.float32)
conv_result = convolve2d(a, kernel, mode='same')
a_centers = (conv_result == 9).astype(np.float32)

方案2:纯numpy实现(无额外依赖,要求numpy≥1.20.0)

使用numpy自带的滑动窗口工具计算每个3×3邻域的和,再做判断:

import numpy as np

# 边界补1层0,保证滑动窗口计算后输出形状和原数组一致
pad_a = np.pad(a, 1, mode='constant')
# 生成所有3×3滑动窗口
windows = np.lib.stride_tricks.sliding_window_view(pad_a, (3, 3))
# 计算每个窗口的和,筛选符合条件的位置
a_centers = (windows.sum(axis=(-1, -2)) == 9).astype(np.float32)

两种方案的计算结果和你现有循环逻辑的输出完全一致,面对大尺寸数组时,性能比双重循环高2~3个数量级。


内容的提问来源于stack exchange,提问作者DΦC__WTF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:01