如何生成其值根据输入数组分布的分布?
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}
我编写了以下脚本,它应该创建一个数组,其中包含从 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}