跳转到内容

limit_sample_space

float  limit_sample_space(float minu, float maxu, float u)

float  limit_sample_space(float maxu, float u)

minu

期望的u最小值。minu会被限制在0到1之间。 若未指定,minu默认为0。

maxu

期望的u最大值。maxu会被限制在0到1之间。

u

介于0到1之间的数值。

u超出[minu,maxu]范围时,u会被以某种方式重新映射到该空间内, 使得在[0,1)区间均匀随机的u能产生[minu,maxu]区间内的均匀随机样本并返回。 这种方法避免了直接截断范围边界导致的额外样本聚集问题,同时也避免了范围适配对区间内样本的修改—— 即如果u原本就在范围内,返回值将严格等于u

不过,这种方法比范围适配或截断要慢得多,因此仅在同时需要均匀性和一致性的场景下使用。 例如,它可用于避免概率分布中的离群值,同时不影响非离群值样本。但这种方法也会导致结果不再随u单调递增。 实际上,仅使用范围适配通常也能有效避免离群值,代价是对非离群值样本产生轻微影响。

若要根据概率分布的minvaluemaxvalue确定minumaxu, 可通过minu = CDF(minvalue)maxu = CDF(maxvalue)计算, 其中CDF是该概率分布的累积分布函数(非逆函数)。 接收minvaluemaxvalue参数的sample_exponentialsample_cauchysample_normalsample_lognormalsample_lognormal_by_median函数版本都采用范围适配而非此限制方法, 因为前者能保持单调性。但若需要更好的区间样本一致性,可在采样前对本函数应用于u值。