Julia中如何从自定义分布采样并实现原地更新
解答
Distributions.jl 提供了和randn!逻辑完全对齐的原地采样函数rand!,支持所有符合包接口规范的分布(包括自定义分布)的无额外内存分配采样,用法和你已掌握的randn!几乎一致。
调用示例
对应你给出的randn!使用范式,自定义分布的原地采样实现代码如下:
using Random, Distributions # 初始化随机数生成器、预分配结果存储数组 rng = MersenneTwister(1234) A = zeros(5) # 定义目标分布,此处以均值2、标准差3的正态分布为例,替换为你自己创建的dist实例即可 dist = Normal(2, 3) # 执行原地采样:从dist采样的结果会直接写入数组A,覆盖原有值,无额外数组分配 rand!(rng, dist, A)
使用说明
- 接口调用格式为
rand!(rng, dist, A),其中rng是随机数生成器实例、dist是目标分布实例、A是提前分配好的存储数组 - 该接口对所有Distributions.jl内置分布、以及按照官方接口规范实现的自定义分布均生效
- 反复调用该接口时,只会覆盖数组A内的已有数值,不会产生新的数组内存分配,和
randn!的内存行为、性能表现完全一致,可以直接解决循环采样时产生大量临时内存分配的问题。
内容的提问来源于stack exchange,提问作者user1691278
相关产品推荐
相关产品推荐

