【问题标题】:Simulation of an arbitrary bag of marbles模拟任意一袋弹珠
【发布时间】:2015-08-14 18:51:14
【问题描述】:

所以,我正在尝试模拟一袋弹珠的任意模型(如果这会对它的工作方式产生影响,则需要替换)并且在显示结果时遇到了问题。

我的设置是代码询问袋子里有多少弹珠,你想挑选多少,然后有多少种不同的颜色。 (分别定义为 N、S 和 k)。 然后我在一个单元格数组中遍历 1 和 k 之间的循环来命名弹珠的颜色,然后创建第二个数组,通过询问袋子中每种颜色的数量来模拟概率。 然后我生成一个模拟 10 个“游戏”的随机矩阵(即:rDist=randi(N,[10,S]); 现在我已经选择了弹珠,我创建了另一个 10xS 单元阵列,并希望根据所选择的数量用弹珠的颜色填充该单元阵列。也就是说,假设我有 10 个弹珠,7 个是红色的,3 个是绿色的。如果 PRNG 选择 1:7,我希望结果单元格数组显示“红色”,如果选择 8:10,我希望在相应位置出现“绿色”。我可以对有限的数字执行此操作,但我想将其扩展到具有任意数量的大理石颜色分布的 K 大理石颜色。你能提供任何帮助吗?

我对 2 种大理石类型的“有限”解决方案如下:

for lc=1:10*S
    counter=0;
    if (rDist(lc)>=1 && (rDist(lc)<=Probabilities(1)))
        Results{lc}=Color{1};
    end
    counter=Probabilities(1);
    if (rDist(lc)>counter && (rDist(lc)<=counter+Probabilities(2)))
        Results{lc}=Color{2};
    end
end

【问题讨论】:

    标签: matlab statistics probability n-dimensional


    【解决方案1】:

    您可以使用cumsum 计算与每种颜色对应的间隔。然后你需要找到rDist的每个条目属于哪个区间。

    numPicks = 5;
    numGames = 10;
    
    names = {'red', 'white', 'blue'};
    counts = [2 6 9];
    N = sum(counts);
    
    cumsumCounts = cumsum(counts);
    rDist=randi(N, [numGames, numPicks]);
    
    out = cell(size(rDist));
    for i = length(counts):-1:1
      out(rDist <= cumsumCounts(i)) = names(i);
    end
    

    您也可以使用通信系统工具箱中的quantiz 或统计和机器学习工具箱中的randSample 来执行此操作。最后,您可以使用更令人困惑的单行代码out = names(arrayfun( @(x)( find(cumsumCounts &gt;= x, 1) ), rDist));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      相关资源
      最近更新 更多