在MATLAB

时间:2015-06-15 03:53:33

标签: matlab

我有一个与此类似的问题: Weighted random numbers in MATLAB

此时,我在程序中使用randsample,如下所示:

T = [0 .5 .5; .5 0 .5; .5 .5 0]
choices = 1:3

for i = 1:3
    t(i) = transpose(randsample(choices,1,true,T(i,:)));
end

因此t(i)为每个人描述了他们将选择哪个邻居。

我的T矩阵,当逐行读取时描述了一个人选择邻居的概率。例如,第一行表示第一个人将选择节点2或3,每个概率为50%。他们无法选择自己的节点1.当我扩展我的模型时,他们总是有相同的选择邻居的概率,1 /邻居的数量。为了简洁起见,我在这里硬编码了T矩阵。

我尝试使用链接主题中建议的histc,但由于我的0矩阵的每一行总是有T,所以我不认为累积和精确设置中间为0的行的bin(此处为T的第二行)。

我也尝试使用bsxfun,当我单独查看T矩阵的每一行时,我能够获得灵敏的输出,但我没有把它放在一个循环中。我觉得解决方案可能就在这里,但我不确定我是否完全理解这个功能在我的上下文中是如何运作的。

那么,有没有人对如何加速我的randsample函数有任何想法?目前,我迭代它10000x,所以它是我程序中的一个主要瓶颈。它的工作原理我需要它,它太慢了。

1 个答案:

答案 0 :(得分:1)

因此,您希望每个人都能以一致的概率在所有其他人中挑选邻居​​。

我会这样做。它应该很快。

n = 7;                      %// number of persons
t = ceil((n-1)*rand(1,n));  %// step 1
t = t + (t>=(1:n));         %// step 2

对于每个k,从{t(k)1,...,2,{{1}中随机挑选生成的k-1具有均匀分布的},...,k+1}。为此,使用了两个步骤:

  1. 从{n,...,1};
  2. 中挑选一个随机值
  3. 如果此值大于或等于n-1,则会增加k
相关问题