首页 > 解决方案 > Julia,根据概率执行替换

问题描述

我正在使用 3d 数组中的数组,并且在这里有很多以前的帮助,得到了一个非常好的简单优雅的解决方案:

## Reset 44 and 33 to 4 and 3 respectively
replace!(@view(Pop[end, :, 1]), 33=>3, 44=>4)

现在,如果我想在概率的基础上进行替换,我将在其中提供概率,我可以在一行中完成还是需要编写一个函数来询问小数组,然后循环遍历并进行基于替换关于概率?因此,例如,如果我想用 0.7 的概率替换 33=>3,那么 sub 是在 70% 的 33 出现时生成的,并用不同的概率替换 44=>4,例如 0.85,我将如何写这个?谢谢。Ĵ

标签: arraysreplacejuliaprobability

解决方案


这是一种可能的解决方案,它非常有效,只比确定性方案慢几倍replace!

function rreplace!(xs, args...)
    @inbounds for i in eachindex(xs)
        val = xs[i]
        for tup in args
            if val == tup[1][1]
                rand(tup[2]) && (xs[i] = tup[1][2])
                break
            end
        end
    end
    return xs
end

你可以这样称呼它:

rreplace!(xs, (33=>3, Bernoulli(0.7)), (44=>4, Bernoulli(0.85)))

您当然可以使用除 之外的其他发行版Bernoulli,只要它们返回truefalse

在您的特定问题中,它将是

rreplace!(@view(Pop[end, :, 1]), (33=>3, Bernoulli(0.7)), (44=>4, Bernoulli(0.85)))

推荐阅读