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

二维NumPy数组沿y轴将局部极大值置255其余置0的实现方法

二维NumPy数组沿指定轴检测局部极值并二值化实现

核心思路

  • 利用scipy.signal.argrelextrema指定检测轴和比较规则,获取极值点的索引
  • 构建同形状的布尔掩码标记极值位置,传入np.where完成值替换:极值位置设为255,其余位置设为0

说明

你给出的示例效果实际是沿水平方向(axis=1,逐行)同时检测局部极大值、局部极小值得到的结果,和描述中“沿y轴检测局部极大值”的规则有偏差,以下代码先匹配示例输出,你可以根据实际需求调整轴参数和比较规则。

实现代码

import numpy as np
from scipy.signal import argrelextrema

# 输入数组
input_arr = np.array([
  [-33, -57, -77, -83, -70, -42,  -5,  45, 107, 160, 183, 172],
  [-35, -60, -80, -85, -70, -42,  -4,  46, 106, 160, 183, 172],
  [-36, -64, -84, -88, -72, -41,  -4,  45, 105, 158, 181, 173]
])

# 初始化全False的掩码
extrema_mask = np.zeros_like(input_arr, dtype=bool)

# 检测局部极大值(比相邻点大,比较函数用np.greater),沿axis=1逐行检测
max_idx = argrelextrema(input_arr, np.greater, axis=1)
extrema_mask[max_idx] = True

# 检测局部极小值(比相邻点小,比较函数用np.less),不需要可删除这两行
min_idx = argrelextrema(input_arr, np.less, axis=1)
extrema_mask[min_idx] = True

# 替换值得到结果
output = np.where(extrema_mask, 255, 0)

运行结果

执行后得到的output和期望输出完全一致:

array([[  0,   0,   0, 255,   0,   0,   0,   0,   0,   0, 255,   0],
       [  0,   0,   0, 255,   0,   0,   0,   0,   0,   0, 255,   0],
       [  0,   0,   0, 255,   0,   0,   0,   0,   0,   0, 255,   0]])

参数调整说明

  • 若要沿y轴(垂直方向,逐列)检测,将argrelextrema的axis参数改为0即可,注意边界行(第一行、最后一行)无上下邻点,不会被判定为极值
  • 若只需要检测局部极大值,删除极小值检测的两行代码即可
  • 可通过argrelextrema的order参数调整极值判定的邻域宽度,默认值为1,即仅和直接相邻的点比较

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:06:22