在Matlab中,如何计算加权后无重复的N个随机数? |
您所在的位置:网站首页 › matlab怎么重复矩阵 › 在Matlab中,如何计算加权后无重复的N个随机数? |
本问题已经有最佳答案,请猛点这里访问。
我正尝试随机计算5个数字。数字1-35具有分配给每个数字的设置概率权重。我想知道如何在Matlab中计算5个随机数且权重不重复。还寻求如何计算其中的5组。 相关讨论 我已经看过@excaza Ive了,但是可以重复 您可以做的是生成一个具有所有重复的向量,例如ex [1 1 1 2 3 3 3 3 3 3 4 4],然后对其进行混洗。然后按顺序使用每个元素。 检查datasample尽管我怀疑MATLAB对此具有内置功能,但randsample的文档却建议否则: Y = randsample(N,K,true,W) or randsample(POPULATION,K,true,W) returns a weighted sample, using positive weights W, taken with replacement. W is often a vector of probabilities. This function does not support weighted sampling without replacement. 因此,相反,由于您只在寻找一些数字,所以循环并不是一个糟糕的主意: 1234567891011POP = 1:35; W = rand(1,35); W=W/sum(W); k = 5; mynumbers = zeros(1,k); for i=1:k mynumbers(i) = randsample(POP,1,true,W); idx2remove = find(POP==mynumbers(i)); POP(idx2remove) = []; W(idx2remove) = []; endW中的条目是您的体重。向量POP是您的数字1到35。数字k是您想要选择的数字。 循环使用MATLAB的randsample一次随机采样一个数字(带有权重),然后从POP和W中删除所选的数字和相应的权重。 对于更大的k,我希望有更好的解决方案... 相关讨论 刚刚在这里发现重复 坚果,谢谢!快速提问。我真是matlab的新手,老实说只是将它用于我生活中的这个特定问题。所以我不太明白你在for循环中做什么。 (即,我在哪里分配分配的权重)。抱歉,这真是太新了! 除了前一个之外的另一跟进,有没有办法生成5个5的不同向量? 是第一个问题,第二个问题是将代码封装在Geoffs答案中的另一个for循环中。 @David,不知道该怎么做,这对编码非常痛苦,我只是将它用于工作中的特定项目,谢谢您的耐心配合。 试试这个MATLAB入门au.mathworks.com/help/matlab/getting-started-with-matlab.htm l 同样在文档中:To randomly sample data, with or without replacement, use datasample. 但是你不能告诉我如何做第二个forloop吗?我和一些伙伴正在玩某事,这将是巨大的帮助。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |