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

如何在scikit-hep hist中将线性分箱的hist对象转为log(x)分箱?

关于scikit-hep hist线性分箱转log(x)分箱的实现方案

scikit-hep hist完全支持自定义箱边重分箱,针对log(x)分箱的需求,有两种高效的实现方式,无需手动循环切片:

方法1:直接创建对数分箱的新直方图

如果只需要标准的对数均匀分箱,可以利用LogN参数快速生成新直方图,并迁移原数据的计数和误差:

import hist
import numpy as np

# 示例原线性分箱直方图
h = hist.Hist.new.Reg(100, 1, 1000, name="x").Double()
h.fill(np.random.uniform(1, 1000, 10000))

# 创建50个箱的对数分箱直方图,范围与原直方图一致
h_log = hist.Hist.new.LogN(50, h.axes[0].low, h.axes[0].high, name="x").Double()
# 填充原直方图的中心值、计数和误差
h_log.fill(h.axes[0].centers, weight=h.values(), variance=h.variances())

方法2:自定义箱边实现重分箱

如果需要非标准的对数分箱(比如自定义间隔),可以构造箱边数组,通过uhi索引语法直接重分箱:

# 构造自定义对数分箱边(示例:从1到1000,共50个箱)
new_edges = np.logspace(np.log10(1), np.log10(1000), 50)
# 直接通过索引完成重分箱,自动合并原箱计数
h_custom_log = h[{0: new_edges}]

上述两种方式都能替代手动循环切片的方案,其中第二种方式是uhi索引语法的扩展用法,比你提到的均匀重分箱h[::rebin(2)]更灵活,完全适配自定义分箱场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:12:15