微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

生成具有给定数值分布矩阵的随机向量

如何解决生成具有给定数值分布矩阵的随机向量

我正试图提出一种从分布矩阵中生成随机向量的快速,智能方法,就像在此讨论的那样: Generate random numbers with a given (numerical) distribution

但是关键的区别是我有一个分布矩阵,而不是一个向量。

现在显然我可以创建一个for循环并在矩阵中的每个向量上循环,但这似乎不是很Python或快速,所以我有点希望有一种更好的方法。 / p>

一个我想做的简单例子: 给定一个概率矩阵

p = [[0.2,0.4,0.4],[0.1,0.7,0.2],[0.44,0.5,0.06],...]

我希望绘制元素,其中每个元素都是通过概率矩阵中的概率选择的。 (基本上,我想从我的一个概率矩阵中生成一个“一键编码”)。 给定上述概率,例如:

t = [2,1,2,...]

我需要对长序列执行此操作,并且需要执行数百万次,但每次每次序列仅执行一次。 (用于深度学习的数据增强)

有人能做到这一点吗?

解决方法

您可以使用逆变换采样。计算p矩阵上的累积分布,对单个随机向量进行采样,其大小为矩阵高度,然后沿累积矩阵的每一行返回最大索引。在代码中:

p = np.array([[0.2,0.4,0.4],[0.1,0.7,0.2],[0.44,0.5,0.06]])
u = np.random.rand(p.shape[0])
idxs = (p.cumsum(1) < u).sum(1)

然后将根据p的行对idxs进行采样。例如:

np.histogram((p[0].cumsum() < np.random.rand(10000,1)).sum(1),bins=3)
# array([1977,4018,4005]),... 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。