【问题标题】:Sampling Random Columns In Octave在 Octave 中对随机列进行采样
【发布时间】:2013-05-01 20:38:49
【问题描述】:

我有一个矩阵,我想为 Octave 中的新矩阵随机选择 t 个随机列,但我希望我的随机选择基于矩阵。所以基本上我想选择 t 随机列,其概率在选择之前确定。有没有办法在 Octave/Matlab 中做到这一点?

谢谢!

【问题讨论】:

标签: matlab matrix octave


【解决方案1】:

假设您有一些权重行向量W,(或者在您的情况下可能是矩阵特征值的某个函数),您应该首先创建一个表示权重的归一化累积和的向量,如下所示:

cumNormW = cumsum(W)./sum(W);

cumNormW 的值现在应该是单调递增的,并且应该在W(1)1 的范围内。

接下来,您需要从[0,1] 上的均匀分布中抽取数据

randVal = rand(1);

您将使用此随机值来查找您刚刚随机选择的相应列。最后,您要找到累积归一化权重向量的第一个索引。

randCol = find(cumNormW <= randVal, 1, 'last')

这将为您提供最终的随机列选择。

现在,如果您想确保选择 t不同 列,则需要跟踪 randCol 的先前值并简单地重复上述 randVal , randCol 步骤,直到您生成一个尚未选择的列。


例子

假设您有一个包含 4 列的矩阵,并且您已经计算了该矩阵的特征值并将它们存储在 W 中。我们假设列对应于特征向量,并且您希望选择概率与该列的特征值成比例的列与特征值之和相比。

W = [4 3 2 1];

归一化后得到cumNormW = [0.40 0.70 0.90 1];

如您所见,与选择最后一列 ('0.9

您通过rand(1) 抽取一个随机数,在此示例中,假设为randVal = 0.82。使用最后的randCol 步骤,对于本次迭代,您将获得randCol = 3

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    相关资源
    最近更新 更多