jax.random.randint#
- jax.random.randint(key, shape, minval, maxval, dtype=None, *, out_sharding=None)[源代码]#
以给定形状/数据类型采样 [minval, maxval) 范围内的均匀随机值。
- 参数:
key (ArrayLike) – 用作随机密钥的 PRNG 密钥。
shape (Shape) – 一个表示形状的非负整数元组。
minval (IntegerArray) – 一个整数或整数数组,可以与
shape进行广播兼容,表示范围的最小值(包含)。maxval (IntegerArray) – 一个整数或整数数组,可以与
shape进行广播兼容,表示范围的最大值(不包含)。dtype (DTypeLikeInt | None) – 可选,返回值的整数类型(如果 jax_enable_x64 为 true,则默认为 int64,否则为 int32)。
- 返回:
具有指定形状和 dtype 的随机数组。
- 返回类型:
注意
randint()使用基于模数的计算,已知在某些情况下会产生轻微的偏差。偏差的大小与(maxval - minval) * ((2 ** nbits ) % (maxval - minval)) / 2 ** nbits成比例:换句话说,当(maxval - minval)是 2 的幂时,偏差为零,否则当(maxval - minval)相对于采样类型的范围很小时,偏差会很小。为了减少这种偏差,8 位和 16 位值将始终在 32 位进行采样,然后转换为请求的类型。如果您发现自己正在采样可能存在此偏差问题的数值,一种可能的替代方法是通过 uniform 进行采样。
def randint_via_uniform(key, shape, minval, maxval, dtype): u = jax.random.uniform(key, shape, minval=minval - 0.5, maxval=maxval - 0.5) return u.round().astype(dtype)
但请记住,此方法由于浮点舍入误差而存在其自身的偏差,特别是,在范围
[minval, maxval)内可能存在一些整数无法通过此方法生成。