![]() |
求助:如何按照概率从数组中获得元素
有一个数组,如a=[1,2,3,4,5,6,7,8],现要求从中获得3个元素,条件是以各元素的大小为概率。如何编写这样一个程序?
多谢了,小弟是菜鸟,请求各位大大帮忙。谢谢! |
回复: 求助:如何按照概率从数组中获得元素
[QUOTE=zx1012;48448]有一个数组,如a=[1,2,3,4,5,6,7,8],现要求从中获得3个元素,条件是以各元素的大小为概率。如何编写这样一个程序?
多谢了,小弟是菜鸟,请求各位大大帮忙。谢谢![/QUOTE] 先求出概率 然后生成概率 进行概率比较 如果大了 就选择 |
回复: 求助:如何按照概率从数组中获得元素
你这个问题,我觉得好难呀。我还没想出好办法。
我也是菜。 |
回复: 求助:如何按照概率从数组中获得元素
我自己用了好长时间终于写了一串代码,结果还不错。我也没有仔细检验,只是觉得结果没有问题了。
function Y=Random_3(x); %产生3个随机数,产生概率与其本身大小相关 %我觉得我做的时候主要问题在:比如说x=1:10;第一次产生的随机数是10,而第二次还可能出现10,就需要摒弃。 k=length(x); %get the length of x s=sum(x); %求x所有元素的和 a1=x(1); %将x元素转存到a1中,需要注意的是a1(i)=x(1)+x(2)+...+x(i) for m=2:k a1=[a1 sum(x(1:m))]; end a2=[0 a1]; %为了方便又引入了a2,a2只是比a1多了一个0元素。 index=[]; %index用来盛索引 R=rand(1)*s; %产生第一个随机数。随机数的最大值为x中所有元素的和 for m=1:k %这一个for语句用来将第一个随机数的索引放入index中 if(R>a2(m)&&R<=a2(m+1)) index=[index m]; r=m; end end for times=1:2 %这个for语句是重复了上面的工作,略有不同。 while nnz(r==index)>0 R=rand(1)*s; for m=1:k if (R>a2(m)&R<a2(m+1)) r=m; break end end end index=[index r]; end Y=x(index); |
回复: 求助:如何按照概率从数组中获得元素
我自己用了好长时间终于写了一串代码,结果还不错。我也没有仔细检验,只是觉得结果没有问题了。
function Y=Random_3(x); %产生3个随机数,产生概率与其本身大小相关 %我觉得我做的时候主要问题在:比如说x=1:10;第一次产生的随机数是10,而第二次还可能出现10,就需要摒弃。 k=length(x); %get the length of x s=sum(x); %求x所有元素的和 a1=x(1); %将x元素转存到a1中,需要注意的是a1(i)=x(1)+x(2)+...+x(i) for m=2:k a1=[a1 sum(x(1:m))]; end a2=[0 a1]; %为了方便又引入了a2,a2只是比a1多了一个0元素。 index=[]; %index用来盛索引 R=rand(1)*s; %产生第一个随机数。随机数的最大值为x中所有元素的和 for m=1:k %这一个for语句用来将第一个随机数的索引放入index中 if(R>a2(m)&&R<=a2(m+1)) index=[index m]; r=m; end end for times=1:2 %这个for语句是重复了上面的工作,略有不同。 while nnz(r==index)>0 R=rand(1)*s; for m=1:k if (R>a2(m)&R<a2(m+1)) r=m; break end end end index=[index r]; end Y=x(index); |
所有时间均为北京时间。现在的时间是 05:01。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.