python - 如何使用 Python 从多个分类分布中采样
问题描述
设 P 是一个数组,其中每行总和为 1。如何生成矩阵 A,其中
A 与 P 具有相同的维度,并且 A_{ij} 等于 1,概率为 P_{ij}
A 在每一行中恰好有一个等于 1 的条目,所有其他条目为零
我怎样才能在 Numpy 或 Scipy 中做到这一点?
我可以使用 for 循环来做到这一点,但这显然很慢。有没有办法使用 Numpy 来提高效率?还是难波?
解决方案
好的,使用带有 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]]
推荐阅读
- asp.net-core - ASP.NET Core 6.0 Minimal API / Swagger 标签
- web - 如何通过语义网络方法/OWL 让大数据更智能、更有用?
- python - 给定一个图,返回从头到尾最多有 k 条边的最短路径
- ios - 忽略滚动视图中的安全区域,但不忽略其子视图
- ruby-on-rails - Rails 使用邮件流配置发送带有邮戳的电子邮件
- angular-directive - Angular 12 单元测试:不能绑定到“scrollIntoForm”的指令
- php - 有逗号就单独捕获,没有RegEx就整体捕获
- ms-access - Google Drive 和 MS Access
- firebase - 无法解析 Android 应用程序模块 gradle 配置。解决或重新同步
- php - 如何获取UAPI源码,如何集成Cpanel.php文件