具有指定概率密度的二元向量

时间:2014-04-07 11:36:44

标签: matlab probability information-theory

假设我正在使用二进制向量{0,1}。 我只想把输入参数放在像p = [0,1]这样的东西,并且确切的零数对应于给定的概率(给定矢量的长度,比如说' N'),我应该随机排列。

例如,当p = 0.5且N = 8时我想要[0 0 1 0 1 1 0 1]或[1 1 0 0 1 0 0 1],重要的是要有50随机顺序的零的百分比。如果有必要,它应该在表示不可能时进行舍入(即p = 0.200034和N = 8)。

我做了X =(rand(1,N)< =(1-p));但显然它并没有给出精确的密度。另一个解决方案是为cicle做一个,并使用累加器以随机顺序访问向量,但我认为应该有一个更好(更快)的解决方案。

由于

2 个答案:

答案 0 :(得分:3)

您可以计算一个n;使用n个和N-n零(按此顺序)构建一个向量;然后随机置换该矢量:

p = .5;
N = 8;

n = round(N*p); %// desired number of ones
result = [ ones(1,n) zeros(1,N-n) ]; %// n ones and N-n zeros
result = result(randperm(N)); %// random order

答案 1 :(得分:1)

您可以使用randsample从矢量中抽取k = round( N * p )function v = myBinSample( p, N ) k = round( p * N ); idx = randsample( N, k ); v = zeros(1, N); v( idx ) = 1; 条目,并将它们设置为1:

{{1}}