gpt4 book ai didi

vba - 生成具有一定概率的数字视觉基础vba

转载 作者:行者123 更新时间:2023-12-02 07:54:35 25 4
gpt4 key购买 nike

我有一些可能性

26% 18% 26% 20% 10%

我想根据概率组生成一些数字(在一定范围内随机)。

我之前已经以 80% 和 20% 的 2 个概率做到了这一点,如下所示:

If rnd*100 < 80 then Output = 2 
Else output = 10
End if

但我不知道如何在超过 2 个概率的情况下做到这一点!

最佳答案

生成 [0,1] 范围内的随机数。开始添加概率(0.26、0.18 等),直到超过所选数字。一旦发生这种情况 - 选择范围内相应的数字。

以下函数传递两个数组(假设长度相同)。第一个包含要从中采样的项目范围(不必是数字),第二个数组是相应的概率:

Function RandItem(items As Variant, probs As Variant) As Variant
Dim i As Long, sum As Double
Dim spin As Double

spin = Rnd()
For i = LBound(probs) To UBound(probs)
sum = sum + probs(i)
If spin <= sum Then
RandItem = items(i)
Exit Function
End If
Next i
'if you get here:
RandItem = items(UBound(probs))
End Function

可以这样测试:

Sub test()
Randomize
Dim i As Long, v As Variant
ReDim v(1 To 50)
For i = 1 To 50
v(i) = RandItem(Array(1, 2, 3, 4, 5), Array(0.26, 0.18, 0.26, 0.2, 0.1))
Next i
Debug.Print Join(v)
End Sub

典型输出:

2 4 2 1 1 4 3 4 2 3 2 4 5 1 1 3 3 4 3 3 3 4 4 2 4 4 1 2 3 1 2 3 5 2 3 4 5 2 3 2 3 4 1 1 1 2 1 4 3 2

这是一个条形图,显示 1000 个随机选择(使用相同的 5 个概率):

enter image description here

正如您所看到的,它很好地匹配了目标概率。

关于vba - 生成具有一定概率的数字视觉基础vba,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37356179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com