首页 > 解决方案 > 绘制直方图的源码说明

问题描述

此链接中,以下源代码用于动态创建直方图:

    private void GaussianDistributionDemo()
    {
        //... ...

        for (var i = 0; i < n_bins * 10000; i++)
        {
            var g = r.NextGaussian(mu, sigma);

            // Below code is for generating the histogram on the fly
            var z = (g - mu) / sigma;

            if (z > 3 || z < -3) continue;

            var b = (int)((z + 3) * n_bins / 6d);
            bins[b]++;
        }

        //... ... ...
   }

有人可以向我解释这个计算吗?

  1. 是什么z
  2. 为什么if (z > 3 || z < -3)检查相关?
  3. 是什么(z + 3) * n_bins / 6d意思?3 和 6d 是从哪里来的?

标签: c#histogram

解决方案


在不详细浏览您提供的链接的情况下,这是我试图回答您的具体问题的尝试

  1. 什么是z?

    z是来自标准正态分布的样本。 标准正态分布

  2. 为什么 if (z > 3 || z < -3) 检查相关?

    可能在代码中,他们只对 [-3,3] 范围内的值感兴趣

  3. (z + 3) * n_bins / 6d 是什么意思?3 和 6d 是从哪里来的?

    (z + 3) * n_bins / 6d帮助确定当前样本所属的 bin 并将 bin 的计数加一。

    再一次,假设您只对范围 [-3,3] 中的值感兴趣,通过将 3 添加到 z,您可以将值转换为范围 [0,6]。现在通过除以 6,将其转换为 [0,1] 并乘以 n_bins,并将其转换为整数,您将获得该数字所属的 bin 的索引

    基本上,代码中的 for 循环从高斯分布中采样 10,000 个值,并且对于每个样本,如果它在 [-3,3] 范围内,则识别它所属的直方图的 bin,并增加 bin 的计数由 1。

    n_bins是在绘制直方图时要将范围 -3 到 3 划分为的 bin 数


推荐阅读