按列搜索searchsorted

时间:2015-11-03 16:52:53

标签: python numpy

我正在尝试使用numpy库在python中实现正向采样。我有一些变量保存条件概率表,我想从这些表中绘制一个随机样本。对于贝叶斯网络中的根,这段代码很简单:

ls = L.cumsum().searchsorted(random.sample(n))

其中L是(C)PT作为(一维)numpy数组,n是我想要采样的样本数。

现在我想对一个真实的条件概率表做同样的事情。不幸的是,之前的代码不再适用,因为我现在必须考虑所选的l,这导致某些表具有两个维度,因此searchsorted()无法处理它。 (例如P_L[:,ls].cumsum(0)提供的数组看起来像[[.8 .8 ... ] [1. 1. ...]]

我找到了解决这个问题的方法:

randomness = random.sample(n)
ps = ndarray(ls.shape, int)
for i in 0,1 :
    mask = ls == i
    ps[mask] = P_L[:,i].cumsum().searchsorted(randomness[mask])

但我认为这是一种相当肮脏的方式,我想知道是否有人会知道如何以更体面/更干净的方式写出来。

提前致谢

0 个答案:

没有答案