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

概率函数直方图绘制与逆变换抽样空图问题排查

问题原因及修复方案

核心问题:重复的对数转换

你在plt.hist()中设置了log=True,同时又调用了plt.yscale('log'),这相当于对直方图的y值进行了两次对数转换,数值被压缩到几乎看不见的程度,因此呈现空图。

修复后的完整代码

import numpy as np
import matplotlib.pyplot as plt  # 补充缺失的绘图库导入

s_min = 1 
s_max = 1000 

# 计算归一化常数
C = 1 / (np.log(s_max) - np.log(s_min))
u = np.random.rand(int(1000000))
s = s_min * np.exp(u * (np.log(s_max) - np.log(s_min)))

# 使用理论范围设置bins,避免抽样极值的微小偏差
a = np.log10(s_min)
b = np.log10(s_max)
mybins = np.logspace(a, b, num=17)

# 移除hist中的log=True,保留yscale('log')即可
plt.hist(s, bins=mybins, density=True, histtype='step', label='Random Numbers')

x = np.logspace(a, b, num=100)
y = C / x
plt.plot(x, y, 'r', label='Expected Distribution')

plt.xlabel('s')
plt.ylabel('P(s)')
plt.xscale('log')
plt.yscale('log')
plt.legend()
plt.show()

额外优化说明

  • 补充import matplotlib.pyplot as plt:这是使用plt绘图的必要前提,避免因未导入库导致的报错。
  • 改用理论值设置bins范围:直接用s_min和s_max计算对数刻度区间,比抽样得到的极值更稳定,避免随机抽样的波动影响bins的覆盖范围。

内容的提问来源于stack exchange,提问作者Галымжан Балтабай

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:15:33