Python自定义分箱直方图如何提取各区间对应的原始数据
提取直方图各分箱原始数据的实现方法
你可以使用numpy.digitize()方法实现需求,该方法可以返回每个数据点对应的分箱索引,再按索引筛选即可得到每个分箱的原始数据,和你现有代码的分箱规则完全兼容。
完整实现代码
import numpy as np # 沿用你已定义的分箱规则 bins = [0,1,2,3,4,5,6,7,8,9,10] # 获取每个数据点所属的分箱索引,right=False保证和plt.hist的左闭右开分箱规则一致 bin_indices = np.digitize(dist_from_spacer1, bins, right=False) # 初始化存储各分箱原始数据的列表 binned_data = [] for bin_idx in range(1, len(bins)): # 筛选当前分箱对应的所有原始距离数据 current_data = dist_from_spacer1[bin_indices == bin_idx] binned_data.append(current_data)
结果说明
- 最终得到的
binned_data是和分箱顺序一一对应的列表,binned_data[0]对应01μm区间的所有原始数据,`binned_data[1]`对应12μm区间的数据,以此类推 - 你可以直接通过
len(binned_data[i])验证每个分箱的数量,和np.histogram返回的计数结果完全一致
可选简化方案(基于pandas)
如果你已经在项目中使用pandas,可以用pd.cut更便捷地完成分箱分组:
import pandas as pd bins = [0,1,2,3,4,5,6,7,8,9,10] # 对数据做分箱,include_lowest=True保证左边界值被正确归入首个分箱 bin_group = pd.cut(dist_from_spacer1, bins=bins, include_lowest=True) # 按分箱分组提取原始数据 binned_data = [group.to_list() for _, group in pd.Series(dist_from_spacer1).groupby(bin_group)]
内容的提问来源于stack exchange,提问作者kamacite
相关产品推荐
相关产品推荐

