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

如何按高度阈值隔离3D曲面区域?基于np.histogram2d离散网格

提取二维直方图中高于阈值的网格

嘿,这个需求用NumPy的布尔索引和np.where()就能轻松实现,我给你一步步拆解清楚:

首先得明确几个核心点:

  • hist_values是二维数组,每个元素对应一个网格的高度值
  • hist_x和hist_y是网格的边缘坐标,所以实际的网格数量是(len(hist_x)-1) × (len(hist_y)-1),和hist_values的形状完全匹配

具体实现步骤

  1. 设定阈值:先定义你要筛选的高度阈值,比如threshold = 10(根据你的需求调整数值)
  2. 生成布尔掩码:用布尔运算找出所有高度高于阈值的网格位置:
    mask = hist_values > threshold
    
  3. 获取网格的索引位置:用np.where()提取掩码中True对应的行和列索引:
    rows, cols = np.where(mask)
    
  4. 获取网格的坐标范围:结合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:54