Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2011-09-16, 11:57   #1
zx1012
初级会员
 
注册日期: 2009-01-30
年龄: 44
帖子: 2
声望力: 0
zx1012 正向着好的方向发展
默认 求助:如何按照概率从数组中获得元素

有一个数组,如a=[1,2,3,4,5,6,7,8],现要求从中获得3个元素,条件是以各元素的大小为概率。如何编写这样一个程序?
多谢了,小弟是菜鸟,请求各位大大帮忙。谢谢!
zx1012 当前离线   回复时引用此帖
旧 2011-10-10, 08:43   #2
anbcjys
高级会员
 
注册日期: 2008-09-14
年龄: 43
帖子: 351
声望力: 24
anbcjys 正向着好的方向发展
默认 回复: 求助:如何按照概率从数组中获得元素

引用:
作者: zx1012 查看帖子
有一个数组,如a=[1,2,3,4,5,6,7,8],现要求从中获得3个元素,条件是以各元素的大小为概率。如何编写这样一个程序?
多谢了,小弟是菜鸟,请求各位大大帮忙。谢谢!
先求出概率 然后生成概率 进行概率比较 如果大了 就选择
__________________
qq604443022
anbcjys 当前离线   回复时引用此帖
旧 2011-10-10, 16:48   #3
loalive
初级会员
 
注册日期: 2011-10-10
年龄: 37
帖子: 15
声望力: 14
loalive 正向着好的方向发展
默认 回复: 求助:如何按照概率从数组中获得元素

你这个问题,我觉得好难呀。我还没想出好办法。
我也是菜。
loalive 当前离线   回复时引用此帖
旧 2011-10-10, 21:50   #4
loalive
初级会员
 
注册日期: 2011-10-10
年龄: 37
帖子: 15
声望力: 14
loalive 正向着好的方向发展
默认 回复: 求助:如何按照概率从数组中获得元素

我自己用了好长时间终于写了一串代码,结果还不错。我也没有仔细检验,只是觉得结果没有问题了。
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);
loalive 当前离线   回复时引用此帖
旧 2011-10-10, 21:51   #5
loalive
初级会员
 
注册日期: 2011-10-10
年龄: 37
帖子: 15
声望力: 14
loalive 正向着好的方向发展
默认 回复: 求助:如何按照概率从数组中获得元素

我自己用了好长时间终于写了一串代码,结果还不错。我也没有仔细检验,只是觉得结果没有问题了。
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);
loalive 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 00:20


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.