如何对1024×1024的0~1值数组分箱计数计算数据集PDF
Numpy分箱计数长度不匹配问题解决
- 问题根源
- 你手动定义的
bins数组对应的分箱数为len(bins)-1=21,和你手动设置的num_bins=22本身就不匹配 - 调用
np.histogram时同时传入bins数组和range参数,当bins为自定义数组时range参数会被自动忽略,多余传入反而会导致逻辑混乱
- 你手动定义的
你需要的是中心从0到1、步长0.05的21个分箱,对应边缘范围为[-0.025, 1.025],修正后的实现代码如下:
import numpy as np # 生成分箱边缘,加1e-8避免浮点精度截断导致漏掉最后一个边缘值 bin_edges = np.arange(-0.025, 1.025 + 1e-8, 0.05) bin_width = bin_edges[1] - bin_edges[0] # 统计分箱计数,无需传入range参数,自定义bins优先级更高 counts, _ = np.histogram(Flux, bins=bin_edges, density=False) # 归一化得到PDF,保证积分结果为1 Delta_F = 0.05 PDF = counts / (np.sum(counts) * Delta_F)
补充说明:如果你想用for循环实现计数,只要判断逻辑为bin_edges[i] <= 元素值 < bin_edges[i+1](最后一个分箱允许等于上边缘),逻辑就是正确的,但对于1024×1024规模的数组,numpy内置的histogram执行效率远高于纯Python循环,更推荐使用。
内容的提问来源于stack exchange,提问作者Zeta scientist
相关产品推荐
相关产品推荐

