我有一个矩阵,我想选择t随机列从一个新的矩阵在八度随机,但我希望我的随机选择加权的比例基于奇异值分解的矩阵。所以基本上我想选择t随机列,其概率是在选择之前确定的。有没有办法在Octave/Matlab中做到这一点?在Octave中抽样随机列
谢谢!
我有一个矩阵,我想选择t随机列从一个新的矩阵在八度随机,但我希望我的随机选择加权的比例基于奇异值分解的矩阵。所以基本上我想选择t随机列,其概率是在选择之前确定的。有没有办法在Octave/Matlab中做到这一点?在Octave中抽样随机列
谢谢!
假设你有重量,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];
正如你所看到的,你有画一个数字,导致比上选择第一列(`randVal < = 0.4' )的显著概率较高列('0.9 < randVal < = 1')
您可以通过rand(1)
绘制一个随机数,对于此示例,可以说randVal = 0.82
。使用最后的randCol
步骤,对于此迭代,您将获得randCol = 3
。
请参阅http://stackoverflow.com/questions/2977497/weighted-random-numbers-in-matlab – carandraug 2013-05-01 22:27:13