Matlab 如何以一定的概率在单元格数组中创建随机数

Matlab 如何以一定的概率在单元格数组中创建随机数,matlab,Matlab,我想创建一组随机数。我使用了以下代码: for i = 1:n for j = 1:n Sc{i,j} = sort((randperm(m,randi(m)))); end; end; 这将创建一个单元格数组,其中包含一组从1到5的随机整数。示例Sc{1,1}=[1,3,4]我认为,randi函数使用均匀分布。我想用一些概率来控制集合的大小。例如,我希望我的集合包含概率为.5的所有5个元素(大小为5),以及概率为.1的4、3、2、1个元素的集合。我不知道如何用matlab编写代码。

我想创建一组随机数。我使用了以下代码:

for i = 1:n
 for j = 1:n
   Sc{i,j} = sort((randperm(m,randi(m)))); 
end;
end;

这将创建一个单元格数组,其中包含一组从1到5的随机整数。示例Sc{1,1}=[1,3,4]我认为,randi函数使用均匀分布。我想用一些概率来控制集合的大小。例如,我希望我的集合包含概率为.5的所有5个元素(大小为5),以及概率为.1的4、3、2、1个元素的集合。我不知道如何用matlab编写代码。请帮忙。我对这个软件相当陌生

这应该可以做到。基本上,您需要做的是,因为实际上没有直接的fotward方法来定义自定义加权分布,您可以简单地创建一个数组,该数组中更频繁地包含更高的加权元素,然后对该数组进行统一采样。因此,如果某个元素的概率为0.5,那么创建的数组中有一半元素的概率为0.5。然后,如前所述,只需使用
randi
(整个数组长度)从该数组中选择一个索引,它将遵循您的自定义分布

请参阅下面的代码

sizes = [1,2,3,4,5];
probs = [0.125,0.125,0.125,0.125,0.5];

% some initial sanity checks.
assert(numel(sizes) == numel(probs),'probability must be defined for each size')
assert(sum(probs)==1,'Probabilities must sum to 1')

numEach = round((probs/min(probs)));
weightedSizes = zeros(1,sum(numEach));    

start = 1;
for i = 1:numel(sizes)
    weightedSizes(start:start+numEach(i)-1) = sizes(i);
    start = start+numEach(i);
end

holder = cell(1,10);
for i = 1:10
    randSize = weightedSizes(randi(numel(weightedSizes)));
    holder{i} = randperm(randSize);
end

注意,如果你有一些概率很小的东西,使用这种方法时要非常小心,因为它会创建一个非常大的矩阵。这是因为它假设概率最小的元素只出现一次。将有多达
1/min(概率)

的元素。您的描述很奇怪。不管怎样,我可以总结出这些概率,我不会以1结尾。你知道如何用另一种语言编码吗?对我来说,这似乎不是一个“matlab”问题,而是关于算法/方法…虽然我的解决方案确实有效,但我建议在这个问题中使用这个解决方案,这是重复的。Eitan T提供的一个更简单,没有我的限制,运行速度更快。