假设我正在使用二进制向量{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做一个,并使用累加器以随机顺序访问向量,但我认为应该有一个更好(更快)的解决方案。
由于
答案 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}}