use*_*005 0 python gaussian matplotlib histogram
我必须生成一个高斯分布的随机数列表(我能够做到这一点),然后取这些数字并在直方图中绘制它们.我的问题是我应该在没有使用pylab(或任何其他包)的内置直方图函数的情况下这样做,而且我完全失去了.我一直在网上看,我没有找到任何解释我会怎么做的事,你们有谁知道我能做什么吗?提前致谢.
计算直方图的一种快速方法是一次遍历列表中的一个元素,找出它应该在哪个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)
| 归档时间: |
|
| 查看次数: |
2475 次 |
| 最近记录: |