【发布时间】:2012-02-24 14:54:55
【问题描述】:
假设我有一个非常大的方阵 M(i, j),这样矩阵中的每个元素都代表了在加权随机选择中选择该元素的概率。我需要从矩阵中采样 n 个元素(通过 (i, j) 索引)并进行替换。权重会在主循环的每次迭代中发生变化。
目前,我正在使用类似以下内容:
for m = 1:M_size
xMean(m) = mean(M(:, m));
end
[~, j_list] = histc(rand(n, 1), cumsum([0; xMean'./sum(xMean)']));
for c = 1:n
[~, i_list(c)] = ...
histc(rand(1, 1), cumsum([0;, M(:, j_list(c))./sum(M(:, j_list(c)))]));
end
但这似乎是一个相当笨重的方法,由于 for 循环,这也需要很长时间。有没有更有效的方法?也许如果我以某种方式对矩阵进行矢量化?
*编辑我应该提到我无权访问统计工具箱
非常感谢。
【问题讨论】:
-
在尝试对矩阵进行矢量化以便只调用 histc 和 cumsum 一次之后,似乎这样做实际上需要更长的时间......
-
你知道M矩阵的总和吗(没有实际求和)?
-
我不知道没有求和的总和,因为概率是任意估价的。这是因为它被用作强化学习算法的一部分,它只会增加矩阵中少数元素的值。我想我可以简单地计算一次总和,然后在每次传递时添加新值。
标签: matlab matrix random-sample weighted