arrays - 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,我将如何写这个?谢谢。Ĵ
解决方案
这是一种可能的解决方案,它非常有效,只比确定性方案慢几倍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
,只要它们返回true
或false
。
在您的特定问题中,它将是
rreplace!(@view(Pop[end, :, 1]), (33=>3, Bernoulli(0.7)), (44=>4, Bernoulli(0.85)))
推荐阅读
- javascript - 开发信用卡时间表的代码的 Javascript 问题
- c# - “已经有一个打开的 DataReader 与此命令关联,必须先关闭它。” - 但是哪里?
- angular - Angular 8+ tsconfig Path Aliases not Recognized in .spec files
- azure - 尝试通过 az cli 创建 azure nic 接口时引发错误,v # 表达式无效
- jmeter - JMeter - 定时器和列表变量
- python - 如何使用 pyplot 绘制二进制值
- java - 如何在不更改先前字符串的情况下使用拆分字符串
- jquery - jquery find() 获取图标类
- java - Deduplication of repeated numbers in java
- kubernetes - CloudRun: Debug authentication error from curl