如何生成其值根据输入数组分布的分布?

How can I generate a distribution whose values are distributed according to an input array?

我编写了以下脚本,它应该创建一个数组,其中包含从 1 到 N 的每个数字的概率质量,按照稳健的孤子分布定义。 delta、N、M的取值完全是任意的

N = 300; % length of the the array
in = [1:1:N]; % index array

delta = 0.5; 
M = 70;
R = N/M;

t(1:M-1) = 1./(in(1:M-1)*M);
t(M) = log(R/delta)/M;
t(M+1:N) = 0;

我现在想做的是使用数组 in 和 t 以某种方式 "generate" 一个 pdf,其中 returns 数组中的数字 in 数组 t 中包含的概率。我已经查看了手册并找到了 makedist 函数,但是我没有找到允许我将两个输入数组用作参数的选项。我真的不知道去哪里看。

生成的数字应该用于使用 LT 代码对数据包进行编码(出于教学目的,我只是想了解如何构建它们)。

听起来您希望能够随机选择 1:N 的第 i 个元素,概率与值 t(i) 成正比。

首先,让我们将未归一化的概率重组为一个数组,列出每个值的范围; IE。 t-> p {0,0.01,0.05,0.09, etc} 我只是在这里使用了随机值。

然后我们可以做的是从0到1中随机选择一个数字,并找到与该随机数相关联的i值。 IE。如果我们得到 0.07,那么在我的示例中 i 的值将是 3,因为 0.07 在 0.05 和 0.09 之间并且值 i=3 有 4% 的概率被选中;

s = sum(t);
p = double.empty(N,1);

for i = 1:N
    if(i == 0)
    p(i) = 0
    else
    p(i) = p(i-1) + t(i-1)/s;
    end
end

现在每当我们需要分布中的数字时,我们都可以使用 matlab 的固有查找功能

r = rand()
i = max(find(r-p>0)) % this could probably be optimized

示例的作用:如果我们使用与上面相同的 r 和 p:

 r-p = {0.07, 0.06, 0.02, -0.02, etc} 
 find(r-p>0) = {1,2,3}