在Octave中采样随机列

时间:2013-05-01 20:38:50

标签: matlab matrix octave

我有一个矩阵,我想从随机列中选择 t 随机列中的新矩阵,但我希望我的随机选择基于奇异值分解的比例加权。矩阵。所以基本上我想选择 t 随机列,其概率是在选择之前确定的。有没有办法在Octave / Matlab中做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

cumNormW的值现在应该单调递增,范围应从W(1)1

接下来,您需要通过[0,1]

上的统一分布进行绘制
randVal = rand(1);

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

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

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

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


实施例

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

W = [4 3 2 1];

规范化后,您获得cumNormW = [0.40 0.70 0.90 1];

正如您所看到的,绘制数字的概率明显高于导致选择第一列(`randVal&lt; = 0.4')而不是最后一列('0.9&lt; randVal&lt; = 1')

您通过rand(1)绘制一个随机数,对于此示例,我们说randVal = 0.82。使用最后的randCol步骤,对于此迭代,您将获得randCol = 3