【发布时间】:2020-02-25 07:46:40
【问题描述】:
我有一个大小为 12x12 的 numpy 矩阵,其中包含概率。目的是使用这些概率随机抽取样本,然后返回样本的索引。
目前我正在使用以下代码基于np.random.choice 执行此操作,其中 grid = numpy 矩阵:
rnd_choice = np.random.choice(grid.size, p=grid.ravel() / grid.ravel().sum())
sample_index = np.unravel_index(rnd_choice, grid.shape)
问题在于速度,因为在整个模拟过程中我必须这样做数千次。 Snakeviz 强调这是一个需要改进的领域,因此,我想知道是否有人对如何提高速度有任何想法?
以上代码中使用的 Python 版本是 Python 3.8。
【问题讨论】:
-
首先要做的是在循环外的变量中计算
p=grid.ravel() / grid.ravel().sum(),至少在网格没有改变的情况下是这样。如果可能的话,随机选择也可以一次计算出一个完整的选择数组(有替换)。 -
不幸的是,每个循环都需要计算网格,因为每次的概率都不一样。
标签: python python-3.x numpy