在Matlab中,如何计算加权后无重复的N个随机数?

您所在的位置:网站首页 matlab怎么重复矩阵 在Matlab中,如何计算加权后无重复的N个随机数?

在Matlab中,如何计算加权后无重复的N个随机数?

2023-03-14 23:10| 来源: 网络整理| 查看: 265

本问题已经有最佳答案,请猛点这里访问。

我正尝试随机计算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)   = []; end

W中的条目是您的体重。向量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