我想获得一个长度为N=10
的二进制数组,其中0
= 0.6的概率和1的概率为0.4。但是,在验证实际上概率是否正确时,我得到的概率值不正确。因此,symbols
是生成的0/1整数数组。然后我使用p_1 = sum(symbols==1)/length(symbols)
检查概率是否正确。我哪里出错?
N =10;
p_0 = 0.6;% probability of zeros
*for n = 1:N
xr=rand;
if xr<p_0
symbols(n)=1;
else
symbols(n)=0;
end
end
p_1 = sum(symbols==1)/length(symbols)
p_0 = 1-p_1*
答案 0 :(得分:0)
如果要测试概率是否正确,请生成一个包含百万个值的数组。在10个随机值中,不可能知道潜在的概率是。
请注意,您可以在没有循环的情况下执行您正在执行的操作:
symbols = rand(N,1) > p_0;
(这会生成一个逻辑数组,+symbols
将是一个数字数组。)
答案 1 :(得分:0)
我认为你的困惑在于理解概率,而不是在Matlab中。您正在使用内置函数rand
,它在0..1
之间生成统一分布式值。当您测试值小于某个阈值的假设时,您将生成新的分布。代码是正确的。
observations = rand(N, 1) > p_0
会生成1
和0
的分布。当你增加N
时,你会发现经验结果,
p_1 = sum(observations == 1)
始终接近0.4