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

如何为二维NumPy数组生成掩码:筛选非孤立的大于0.5的元素

生成二维NumPy数组的非孤立高值元素掩码

给定二维NumPy数组,需生成掩码仅保留大于0.5且非孤立的元素:非孤立指元素的邻域(边缘元素有3/5个邻域,中心元素有8个邻域)中至少存在一个大于0.5的元素,排除所有邻域均小于0.5的孤立高值元素。

示例数组

import numpy as np

# 示例数组
a = np.array([
    [0.92576936, 0.41860519, 0.26446948, 0.31691141],
    [0.31797497, 0.2044637 , 0.20939504, 0.54034017],
    [0.85781227, 0.40367301, 0.40215265, 0.95902499],
    [0.15700837, 0.10680368, 0.61971475, 0.35586694],
    [0.25211967, 0.98171005, 0.60740472, 0.89452886]
])

高效实现方案

利用NumPy结合形态学膨胀操作,无需手动遍历邻域,简洁高效:

from scipy.ndimage import binary_dilation

# 1. 生成初始掩码:标记所有大于0.5的元素
mask_high = a > 0.5

# 2. 定义8邻域结构元(覆盖所有相邻位置)
structuring_element = np.array([[1,1,1],
                                [1,0,1],
                                [1,1,1]])

# 3. 对初始掩码做膨胀操作:得到所有邻域(含自身)有高值的位置
mask_neighbor_high = binary_dilation(mask_high, structure=structuring_element)

# 4. 最终掩码:自身是高值,且邻域至少有一个高值(即非孤立)
final_mask = mask_high & mask_neighbor_high

print(final_mask)

输出结果

array([[False, False, False, False],
       [False, False, False, True],
       [False, False, False, True],
       [False, False, True, False],
       [False, True, True, True]])

原理说明

  • mask_high:筛选出所有自身大于0.5的元素
  • binary_dilation:将每个高值元素的8邻域标记为True,mask_neighbor_high中为True的位置,要么自身是高值,要么邻域有高值
  • 两者取交集(&):仅保留自身是高值,同时邻域存在高值的元素,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:30:56