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

如何在Awkward Array中过滤含异常值的事件轨道?

处理Awkward0中的异常轨道数据

由于Awkward0(旧版Awkward)没有新版Awkward那样的高层级过滤API,我们可以通过布尔掩码的方式在轨道级别过滤异常值,同时保留事件-轨道的层级结构。关键是不要过早将Awkward数组转换为numpy数组(否则会丢失嵌套结构),直接基于Awkward数组进行操作。

步骤1:保留Awkward数组结构读取数据

先读取数据为Awkward数组,避免立即转换为numpy数组(会扁平化结构,丢失轨道所属的事件信息):

import h5py
import awkward as awkward0
import numpy as np

dtype_X = np.float64  # 根据你的实际类型调整

f = h5py.File('dataAA/pv_HLT1CPU_MinBiasMagDown_14Nov.h5', mode="r")
afile = awkward0.hdf5(f)

# 保持为Awkward数组,不转numpy
pocaz = afile["poca_z"].astype(dtype_X)
pocaMx = afile["major_axis_x"].astype(dtype_X)
pocaMy = afile["major_axis_y"].astype(dtype_X)
pocaMz = afile["major_axis_z"].astype(dtype_X)

步骤2:构建轨道有效性掩码

针对每个变量的异常情况定义有效条件,再合并为单个轨道有效性掩码:

# 定义各变量的有效条件
valid_pocaz = np.abs(pocaz) < 100  # 根据物理场景调整极端值阈值
valid_pocaMx = np.isfinite(pocaMx)  # 排除NaN/inf
valid_pocaMy = np.isfinite(pocaMy)
valid_pocaMz = np.isfinite(pocaMz)

# 所有条件同时满足的轨道才有效
valid_track = valid_pocaz & valid_pocaMx & valid_pocaMy & valid_pocaMz

步骤3:过滤异常轨道

直接用掩码过滤Awkward数组,保留事件-轨道的层级结构:

# 方式1:单独过滤每个变量
filtered_pocaz = pocaz[valid_track]
filtered_pocaMx = pocaMx[valid_track]
filtered_pocaMy = pocaMy[valid_track]
filtered_pocaMz = pocaMz[valid_track]

# 方式2:将所有变量打包为记录数组后过滤(更易维护结构)
tracks = awkward0.zip({
    "poca_z": pocaz,
    "major_axis_x": pocaMx,
    "major_axis_y": pocaMy,
    "major_axis_z": pocaMz
})
filtered_tracks = tracks[valid_track]

# 从过滤后的记录数组中提取单个变量
filtered_pocaz = filtered_tracks["poca_z"]

说明

  • np.abs(pocaz) < 100中的阈值100需要根据你的物理数据实际范围调整,确保只排除真正的极端值。
  • 这种方法会自动保留事件结构:每个事件下只保留符合条件的轨道,不会破坏原有的嵌套层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:27:31