【问题标题】:Randomly picking a column index depending on the weight of its value (MATLAB)根据其值的权重随机选择列索引(MATLAB)
【发布时间】:2014-11-24 14:45:05
【问题描述】:

我在明确说明我要做什么时遇到了一些麻烦,所以我会详细说明。我有一个矩阵 A(n x n),只有零和一。现在,我要做的是随机选择其中一列(从 1 到 n),但是列中的列越多,我选择该列的可能性就越大。因此,首先我将它们的权重定义为

 weight = sum(A,1);
 weight = weight/sum(weight);

这给了我从 0 到 1 的权重。不确定这是否比从 0 到 N 更容易,但没关系。不过,这就是我卡住的地方。我现在如何根据实际值随机选择这些 N 值之一?老实说,我真的不知道。

【问题讨论】:

  • 我在想我需要计算cdf,然后生成一堆随机数,看看它们属于什么区间。虽然不完全确定如何做到这一点。
  • 这是一个很好的方法,但randsample 会为你做到这一点(见我的回答)

标签: matlab random


【解决方案1】:

使用randsample(统计工具箱),它允许您指定权重:

col = randsample(1:size(A,2), 1, true, weight);

然后你的专栏是A(:,col)。

如果您没有统计工具箱:

col = sum(rand<cumsum(weight));

【讨论】:

  • 有时我会惊讶于有多少强大的内置函数,而我缺乏寻找它们的能力。非常感谢,这基本上就是我所需要的。
  • @user129412 欢迎您!不过,这个并不是真正内置的。它是工具箱的一部分。这些更难知道!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2018-07-27
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多