在没有Pylab的情况下创建Python直方图

use*_*005 0 python gaussian matplotlib histogram

我必须生成一个高斯分布的随机数列表(我能够做到这一点),然后取这些数字并在直方图中绘制它们.我的问题是我应该在没有使用pylab(或任何其他包)的内置直方图函数的情况下这样做,而且我完全失去了.我一直在网上看,我没有找到任何解释我会怎么做的事,你们有谁知道我能做什么吗?提前致谢.

tac*_*ell 6

计算直方图的一种快速方法是一次遍历列表中的一个元素,找出它应该在哪个bin中,然后计算每个bin中的条目数.

hist_vals = np.zeros(nbins)
for d in data:
    bin_number = int(nbins * ((d - min_val) / (max_val - min_val)))
    hist_vals[bin_number] += 1
Run Code Online (Sandbox Code Playgroud)

注意,这具有O(len(数据))具有小的前因子.

更聪明的方法是对散列函数进行矢量化:

bin_number = (nbins * ((data - min_val) / (max_val - min_val))).astype(np.int)
Run Code Online (Sandbox Code Playgroud)

并使用切片魔法进行求和:

hist_vals[bin_number] += 1  # numpy slicing magic
Run Code Online (Sandbox Code Playgroud)

如果您担心速度,可以使用基本上执行此操作的numpy函数,但将循环放在c级别:

bin_nums = np.digitize(data, bins) - 1
hist_vals = np.bincount(bin_nums)
Run Code Online (Sandbox Code Playgroud)