问题标签 [uniform-distribution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
468 浏览

python - Numpy 中使用的随机数生成算法

Python Numpy 用来生成随机数的算法是什么?更具体地说,我们调用时使用的算法是什么

是否Linear congruential generator使用了随机生成技术?当我们输入时会发生什么

为什么像 42 这样的数字更受欢迎np.random.seed

0 投票
1 回答
130 浏览

mysql - 如何使用sql从一个有经纬度的数据集中得到一个有代表性的均匀分布的子集?

我有一些带有经纬度信息的数据,但大多数数据点在地理上都很密集,不具有代表性。我希望从这些数据集中挑选出一个具有均匀分布的代表性子集。

下面是我的数据示例

查了一些资料,学会了对经纬度分组,然后用皮尔逊卡方检验,但是对sql的使用不熟悉。

我希望得到 sql 代码来得到这样的子集或者更好地使用 sql 来得到均匀分布的方法。

0 投票
1 回答
420 浏览

vector - 创建随机均匀向量

给定 gunction float frand(),生成均匀分布的随机浮点值,范围为 [0.0, 1.0)

如何创建均匀分布的随机 3D 单位向量和 4D 单位四元数?(因此 3D 矢量位于单位球体上,4D - 在单位超球面上,矢量均匀分布在对应的表面之间)

0 投票
1 回答
631 浏览

python - 如何通过数据集中python中的加权概率获得均匀分布?

我已经看过这个问题并且我知道numpy.random.choice,但我的问题略有不同。

鉴于此,我有一个数据集如下:

所以,它是:

我需要按以下要求重新填充RightandLeft

  1. 和等于Right_LeftNumber of polyps
  2. Right和的值Left来自其当前值的加权概率

例如,对于如下给定的行:

所以,对于这一行,它可能如下所示。这里0.6= 3/(3+2)0.4= 2/(3+2)

更新此行后将是:

问题是,我必须对数据集中的所有行都这样做,但我不知道该怎么做!

0 投票
4 回答
4953 浏览

python - random.uniform(0,1) 可以生成 0 或 1 吗?

文档中,据说有机会uniform(0,1)生成值01.

我已经运行了uniform(0, 1)10000 次,但它从未产生过零。即使在uniform(0, 0.001).

可以random.uniform(0,1)生成0or1吗?

0 投票
1 回答
975 浏览

python - 如何在 Keras 中为输入数据添加均匀分布的噪声?

我需要在输入数据中添加量化噪声。我经常读到这些噪音被建模为均匀分布的噪音。

我有一个用 Keras 实现的编码/解码网络(输入数据是时间序列原始数据),在 Keras 中实现了一个层,您可以使用它添加高斯噪声(GaussianNoise 层),我可以使用该层来创建均匀噪声吗?

如果没有,我可以使用其他已实现的层吗?

0 投票
0 回答
27 浏览

java - 类似于 Java Random Class 的 nextInt(int bound) 的 long 数据类型的方法

对于长数据类型,我需要一个类似于 Java Random Class 的 nextInt(int bound) 的方法。这是我的实现:

其中 rNumber 从调用方法初始化为,

我的问题是,这种实现是否确保在 0(包括)和界限(不包括)之间有一个伪随机、均匀分布的长值?

0 投票
1 回答
265 浏览

c++ - boost::random 经常从不同状态的相同种子生成相同的值

问题描述

有时我使用 Mersenne Twister 引擎从均匀分布中得到相同的随机数,即使我正确使用了引擎并对其进行了迭代。我知道引擎的可能状态的数量是有限的,可能生成的值的数量也是有限的,但现在情况并非如此。

使用 boost 的实现,在范围 [0; 上生成 1e6 个均匀分布的随机值;1e7)。这意味着可能的值比所需的随机值数量要多。但是,我经常得到相同的值,有时在这个范围内超过 100 倍。这怎么可能?

代码

提供了一个简单的代码来重现这种情况。在两个平台上我都遇到了同样的问题:

  • 带有 boost-random:x64-windows 1.71.0 的 MSVS 2019 和
  • g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609 与 libboost-dev 1.58.0.1ubuntu1

问题

代码中是否存在产生相同值的错误?或者它是boost中的一个错误?

对于我的任务,生成具有均匀分布的数字很重要。找到相同的值是最简单的测试之一,但还有更多,我确信我不想对像 Boost 这样的知名库进行质量分析。我不想使用标准库,因为不能保证两个不同的编译器会为相同的种子值提供相同的序列,但这是任务的要求。你能建议什么样的解决方案?

笔记

如果将生成的值与生成的值进行比较,则会看到一种奇怪的行为std::random generates。来自random::boost种子 4561565448989 的值的示例是

而标准库生成

也就是说,boost 序列中每一秒生成的值都非常接近标准库实现中的对应值。当 boost-sequence 中的两个值相等时,standard-library-sequence 中的值不相等,而是彼此接近。MSVS 和 g++ 编译器也有相似之处,它们有权对 Mersenne Twister 和发行版有不同的实现。


更新

可怜的种子?

有人提出,可能是种子值差导致了这种现象,因为size_t只能2^64生成许多不同的初始状态。更糟糕的是,我们的生命很短暂,可能的时间价值更小。虽然这是真的,但它并不能解释为什么不同的状态会多次生成相同的数字。毕竟,引擎只启动一次,所以我从 64 位子集中选择了一个状态,它是所有可能状态的子集。

如果我多次启动引擎并且我在不同(但不够不同)启动的引擎的序列中发现相同的值,那么糟糕的种子可能是一个原因。

它是分发生成器

如果使用标准的 MT 引擎,但使用 boost 的分布,问题仍然存在。但是如果引擎是boost的引擎并且分配是标准的,那么问题就消失了。问题是,正如彼得指出的那样,统一分布取决于我使用 boost 的平台。

一些统计数据

我对分布进行了一些分析。使用相同的boost::random::mt19937 engine,但无论是 boost's 还是 std's uniform_real_distribution<double> u(0, 1),我生成了值对并研究了它们的差异并绘制了它们的相关积分I ( x ),即两个值比x更接近的概率。为U [0; 1) 是一维域,I ( x ) 以线性函数开始,用于小x值(并且趋于 1)。结果如下图所示。 显示 std 和 boost 的相关积分以及期望值的图 该图表明来自 boost 实现的分布不仅有偏差,而且只有 4 个可能的距离值,而众所周知doubles 更密集,std 确实产生了更大的距离值谱。

错误还是不是错误?已删除的答案

一个已被删除的答案建议提高种子值,但到目前为止,事实证明这不是问题的根源。从那以后,我也在boost 的 github上发布了这个问题,但仍然不清楚问题出在哪里。这可能是 boost 中的一个错误,但即使在这种情况下,这个 SO 源也可以帮助其他人识别其分发生成器中的问题。

0 投票
1 回答
158 浏览

hash - 如何将输入映射到具有相同输出和均匀分布保证的输出?

我有一组String可变大小的输入(在我的情况下为 s)N,我需要将其映射到一组固定大小的输出(在我的情况下为数组的索引)M。所以,我基本上需要一个类似的功能:

我需要保证两件事:

  1. 对于任何输入X,我必须始终返回相同的输出Y。例如:每次我将字符串传递"hello"给我的函数时,返回的值必须始终相同,例如1.
  2. 返回值的分布必须是均匀的,即对于无限个输入,相同返回值的平均值必须相同。例如,如果我有M = 4不同的值要返回,并且我有N = 100不同的输入,则映射到每个输出的输入数在理想情况下必须等于25.

我想出了以下代码:

链接到游乐场

我认为上面的代码保证了第一点(对于相同的输入总是相同的输出),但不一定是第二点(分布的均匀性)。

是否有这样一个功能的快速实现,以便保证两个点?

0 投票
1 回答
66 浏览

performance - 指数 vs 均匀 vs 精确平均响应时间

所以我很难回答这个问题。它询问我应该选择什么,这会给我最快的平均响应时间。

所以选项 1 我有指数分布,服务率为每分钟 2 次。这给了我 0.5m = 30s 的服务时间。

选项 2,我在 10 到 50 秒之间有均匀分布,所以这给了我 10 到 50 秒之间的均匀时间,所以平均值是 30 秒的中位数。

选项 3,我有 50% 的概率得到 10 秒的准确响应时间或 50% 的概率我得到 50 秒的准确响应时间。因此,如果我进行以下计算: (0.5)(10/60) + (0.5)(50/60) 我得到 0.5m 或 30s。

所有这些选项都给了我相同的平均响应时间,所以我不确定在这里选择什么。