当前位置: 首页 > 知识库问答 >
问题:

需要在MATLAB中为0的概率向量替代randsample

雷飞虎
2023-03-14

我有一个类似的问题: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/1。为了简洁起见,我在这里硬编码了T矩阵。

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

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

那么,有人知道如何加速我的randsample函数吗?目前,我迭代了10000x,所以这是我程序中的一个主要瓶颈。它按照我需要的方式工作,只是太慢了。

共有1个答案

羊舌赞
2023-03-14

所以你希望,对于每个人来说,在所有其他人中选择一个邻居,概率是一致的。

我会这样做。应该很快。

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
 类似资料:
  • 设一个向量,长度为,随机包含0或1。 获取向量的有效方法是什么,该向量指示每个0段或1段中交替有多少个0或1? 例子: 请注意,始终先计算0,如果向量以1开头,则结果向量的第一个条目,即计数(1),应为0。

  • 好的,我想用matlab生成40张卡片,每10张都是不同的颜色,红、蓝、绿、紫或任何你想要的颜色。每次你选一张牌,它都会被移除,我已经在纸上计算出了被移除的概率 1因为你肯定会第一次选择一张卡片,那么你有30/39的机会选择一种不同的颜色,然后有20/38的机会选择最后两种颜色,然后有10/37的机会选择最后一种颜色。 我想知道有人会如何在matlab中模拟这个。我想你可以生成一个4x10矩阵,由

  • 主要内容:引用向量的元素,向量运算向量是数字的一维数组。在MATLAB中,允许创建两种类型的向量 - 行向量 列向量 行向量 行向量是通过用方括号中的元素集合来创建的,使用空格或逗号分隔元素。 MATLAB将执行上述语句并返回以下结果 - 列向量 列向量是通过用方括号中的元素集合来创建的,分号用于分隔元素。 MATLAB将执行上述语句,返回以下结果 - 引用向量的元素 可以通过多种方式来引用一个或多个向量的元素。向量的第个分量叫作

  • 我已经创建了一个facebook应用程序,并检索了有效期为60天的用户访问令牌。 在Android系统中,有一些东西 public void onResume(){ super.onResume();facebook.extendedcesstokenifneeded(此,null);} 这将扩展accesstoken(如果它即将过期)。PHP中是否有类似的替代方案?因此,60天后,令牌将刷新,而

  • 我等待用户按下两个是或否按钮中的一个。在这些回调中,我将变量分别更新为或。 当我执行MATLAB GUI时,我必须按两次YES按钮才能使值生效。有什么提示/提示可以克服这个问题吗?

  • 版本: Matlab 2009a 我正在生成一个大小向量 现在,Matlab将返回的元素向量[240,63,0]改为[-1,1],大小为 PS:我想从大小矩阵上的所有trhe值中减去或加上'1'