如何按高度阈值隔离3D曲面区域?基于np.histogram2d离散网格
提取二维直方图中高于阈值的网格
嘿,这个需求用NumPy的布尔索引和np.where()就能轻松实现,我给你一步步拆解清楚:
首先得明确几个核心点:
hist_values是二维数组,每个元素对应一个网格的高度值hist_x和hist_y是网格的边缘坐标,所以实际的网格数量是(len(hist_x)-1) × (len(hist_y)-1),和hist_values的形状完全匹配
具体实现步骤
- 设定阈值:先定义你要筛选的高度阈值,比如
threshold = 10(根据你的需求调整数值) - 生成布尔掩码:用布尔运算找出所有高度高于阈值的网格位置:
mask = hist_values > threshold - 获取网格的索引位置:用
np.where()提取掩码中True对应的行和列索引:rows, cols = np.where(mask) - 获取网格的坐标范围:结合
hist_x和hist_y,就能得到每个符合条件的网格的x、y区间,以及对应的高度值。你可以把这些信息整理成易读的格式:# 整理成列表字典,方便后续处理 high_threshold_grids = [] for r, c in zip(rows, cols): grid_data = { "x_interval": (hist_x[r], hist_x[r+1]), "y_interval": (hist_y[c], hist_y[c+1]), "height": hist_values[r, c] } high_threshold_grids.append(grid_data)
完整示例代码
为了让你更直观理解,我写个完整的可运行示例:
import numpy as np # 生成模拟数据 np.random.seed(42) x = np.random.normal(0, 1, 1000) y = np.random.normal(0, 1, 1000) # 计算二维直方图 hist_values, hist_x, hist_y = np.histogram2d(x, y, bins=10) # 设定阈值 threshold = 20 # 筛选高于阈值的网格 mask = hist_values > threshold rows, cols = np.where(mask) # 整理结果 high_grids = [] for r, c in zip(rows, cols): high_grids.append({ "x_range": (round(hist_x[r], 2), round(hist_x[r+1], 2)), "y_range": (round(hist_y[c], 2), round(hist_y[c+1], 2)), "height": hist_values[r, c] }) # 打印结果 print("高于阈值的网格信息:") for grid in high_grids: print(grid)
运行这段代码后,你就能得到所有高度超过20的网格的坐标范围和对应高度值了。
内容的提问来源于stack exchange,提问作者Rebel
相关产品推荐
相关产品推荐

