【问题标题】:Need alternative to randsample for probability vectors with 0s in MATLAB需要替代 randsample 用于 MATLAB 中具有 0 的概率向量
【发布时间】:2015-06-15 03:53:32
【问题描述】:

我有一个类似的问题: 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 矩阵,当按行阅读时描述了一个人选择邻居的概率。例如,第一行表示第一个人将以 50% 的概率选择节点 2 或 3。他们不能选择他自己的节点 1。当我扩大我的模型时,他们选择邻居的概率总是相等的,1/邻居数。为了简洁起见,我在这里硬编码了 T 矩阵。

我尝试按照链接主题中的建议使用histc,但由于我的T 矩阵的每一行中总是有一个0,我认为累积和不能准确地为行设置bin中间有一个 0(这里是 T 的第二行)。

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

那么,有人知道如何加快我的 randsample 函数吗? 目前,我将它迭代 10000 倍,因此它是我程序的主要瓶颈。它可以按我的需要工作,只是太慢了。

【问题讨论】:

标签: matlab


【解决方案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)是从集合{12,...,k-1k+1,...,n}中随机挑选出来的均匀分布。为此,使用了两个步骤:

  1. 从 {1, ..., n-1} 中选取一个随机值;
  2. 如果此值大于或等于k,则增加1

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多