跳至内容

d3-random

从各种分布中生成随机数。有关种子随机数生成的更多信息,请参阅 random.sourcerandomLcg

randomUniform(min, max)

0123456
js
d3.randomUniform(6) // generate numbers ≥0 and <6

示例 · 源代码 · 返回一个生成随机数的函数,这些随机数服从 均匀分布。返回的数字的最小允许值为 min(包含),最大值为 max(不包含)。如果未指定 min,则默认值为 0;如果未指定 max,则默认值为 1。例如

randomInt(min, max)

0102030405060708090100
js
d3.randomInt(100) // generate integers ≥0 and <100

示例 · 源代码 · 返回一个生成随机整数的函数,这些随机数服从 均匀分布。返回的数字的最小允许值为 ⌊min⌋(包含),最大值为 ⌊max - 1⌋(包含)。如果未指定 min,则默认值为 0。例如

randomNormal(mu, sigma)

js
d3.randomNormal(0, 1) // mean of 0, and standard deviation of 1

示例 · 源代码 · 返回一个生成随机数的函数,这些随机数服从 正态(高斯)分布。生成的数字的期望值为 mu,标准差为 sigma。如果未指定 mu,则默认值为 0;如果未指定 sigma,则默认值为 1。

randomLogNormal(mu, sigma)

js
d3.randomLogNormal(0, 1)

示例 · 源代码 · 返回一个生成随机数的函数,这些随机数服从 对数正态分布。随机变量自然对数的期望值为 mu,标准差为 sigma。如果未指定 mu,则默认值为 0;如果未指定 sigma,则默认值为 1。

randomBates(n)

js
d3.randomBates(3) // generates numbers between 0 and 1

示例 · 源代码 · 返回一个生成随机数的函数,这些随机数服从具有 n 个独立变量的 Bates 分布。分数 n 的情况与 d3.randomIrwinHall 一样处理,d3.randomBates(0) 等效于 d3.randomUniform()。

randomIrwinHall(n)

js
d3.randomIrwinHall(3) // generates numbers between 0 and 3

示例 · 源代码 · 返回一个生成随机数的函数,这些随机数服从具有 n 个独立变量的 Irwin–Hall 分布。如果 n 的小数部分非零,则将其视为将该小数部分乘以 d3.randomUniform() 添加到整数部分。

randomExponential(lambda)

js
d3.randomExponential(1 / 40)

示例 · 源代码 · 返回一个生成随机数的函数,这些随机数服从速率为 lambda指数分布;等效于 泊松过程中事件之间的时间,平均值为 1 / lambda。例如,randomExponential(1 / 40) 生成事件之间的时间,平均而言,每 40 个时间单位发生一个事件。

randomPareto(alpha)

js
d3.randomPareto(6)

示例 · 源代码 · 返回一个生成随机数的函数,这些随机数服从形状为 alpha帕累托分布。值 alpha 必须为正值。

randomBernoulli(p)

js
d3.randomBernoulli(0.5)

示例 · 源代码 · 返回一个生成 1 或 0 的函数,根据成功概率为 p伯努利分布,返回 1,失败概率为 q = 1 - p,返回 0。值 p 在 [0, 1] 范围内。

randomGeometric(p)

js
d3.randomGeometric(0.1)

示例 · 源代码 · 返回一个生成服从成功概率为 p几何分布的数字的函数。值 p 在 [0, 1] 范围内。

randomBinomial(n, p)

js
d3.randomBinomial(40, 0.5)

示例 · 源代码 · 返回一个生成服从具有 n 次试验和每次试验成功概率为 p二项分布的随机数的函数。值 n 大于或等于 0,值 p 在 [0, 1] 范围内。

randomGamma(k, theta)

js
d3.randomGamma(2, 1)

示例 · 源代码 · 返回一个生成服从形状参数为 k、尺度参数为 theta伽马分布的随机数的函数。值 k 必须为正值;如果未指定 theta,则默认值为 1。

randomBeta(alpha, beta)

js
d3.randomBeta(3, 1.5)

示例 · 源代码 · 返回一个生成服从形状参数为 alphabeta贝塔分布的随机数的函数,这两个参数都必须为正值。

randomWeibull(k, a, b)

js
d3.randomWeibull(10)

示例 · 源代码 · 返回一个生成随机数的函数,这些随机数服从 广义极值分布之一,取决于 k

在这三种情况下,a 为位置参数,b 为尺度参数。如果未指定 a,则默认值为 0;如果未指定 b,则默认值为 1。

randomCauchy(a, b)

js
d3.randomCauchy(0, 1) // above, clipped to [-5, 5] because “fat tails”

示例 · 源代码 · 返回一个生成具有 柯西分布 的随机数的函数。ab 与 d3.randomWeibull 中的含义和默认值相同。

randomLogistic(a, b)

js
d3.randomLogistic(0, 1)

示例 · 源代码 · 返回一个生成具有 逻辑斯蒂分布 的随机数的函数。ab 与 d3.randomWeibull 中的含义和默认值相同。

randomPoisson(lambda)

js
d3.randomPoisson(400)

示例 · 源代码 · 返回一个生成具有平均值为 lambda泊松分布 的随机数的函数。

random.source(source)

js
const seed = 0.44871573888282423; // any number in [0, 1)
const random = d3.randomNormal.source(d3.randomLcg(seed))(0, 1);
random(); // -0.6253955998897069

示例 · 返回相同类型的生成随机数的函数,但使用给定的随机数生成器 source 作为随机性的来源,而不是 Math.random。给定的随机数生成器必须实现与 Math.random 相同的接口,并且只返回 [0, 1) 范围内的值。这在需要使用种子随机数生成器而不是 Math.random 时很有用。

randomLcg(seed)

js
d3.randomLcg(42)

示例 · 源代码 · 返回一个 线性同余生成器;此函数可以重复调用以获取在 [0,1) 区间内分布良好的伪随机值,并且具有较长的周期(最多 10 亿个数字),类似于 Math.random。可以指定一个 seed 作为 [0,1) 区间内的实数,或者任何整数。在后一种情况下,只考虑低 32 位。用相同种子实例化的两个生成器会生成相同的序列,允许创建可重复的伪随机实验。如果未指定 seed,则使用 Math.random 选择一个。