首页 > 解决方案 > 如何使用 Python 从多个分类分布中采样

问题描述

设 P 是一个数组,其中每行总和为 1。如何生成矩阵 A,其中

我怎样才能在 Numpy 或 Scipy 中做到这一点?

我可以使用 for 循环来做到这一点,但这显然很慢。有没有办法使用 Numpy 来提高效率?还是难波?

标签: pythonnumpyrandommontecarlo

解决方案


好的,使用带有 2d 扩展的选择

import numpy as np

def f(P):
    a = np.zeros(4, dtype=np.int64)
    q = np.random.choice(4, size=1, replace=True, p=P)
    a[q] = 1
    return a

P = np.array([[1/4, 1/4, 1/4, 1/4],
              [1/3,1/3,1/6,1/6]])

r = np.apply_along_axis(f, 1, P)
print(r)

[[0 0 0 1] [0 0 1 0]]

[[1 0 0 0] [0 1 0 0]]


推荐阅读