Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用索引从numpy数组中绘制随机样本_Python_Python 3.x_Numpy - Fatal编程技术网

Python 使用索引从numpy数组中绘制随机样本

Python 使用索引从numpy数组中绘制随机样本,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个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) 问题是速

我有一个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)
问题是速度,因为在整个模拟过程中,我必须这样做几千次。Snakevis强调这是一个需要改进的领域,因此,我想知道是否有人对如何提高这一速度有任何想法


上面代码中使用的Python版本是Python 3.8。

如果需要在for循环中计算grid.ravel,因为概率在for循环的每个周期中都会发生变化,您仍然可以通过每个周期只调用一次
.ravel()
来将计算负担降低两倍:

for cycle in loop:
    # grid gets renewed here...
    g_ravel = grid.ravel()         # do the ravel() process only once

    rnd_choice = np.random.choice(grid.size, p=g_ravel / g_ravel.sum())
    sample_index = np.unravel_index(rnd_choice, grid.shape)
以下内容似乎快了一点(在我的笔记本电脑上是x4):


首先要做的是在循环外的变量中计算
p=grid.ravel()/grid.ravel().sum()
,至少在网格没有改变的情况下是这样。如果这是可能的,随机选择也可以一次计算一个完整的选择数组(替换)。不幸的是,网格需要在每个循环中计算,因为每次的概率都不同。
c = grid.ravel().cumsum()                                              
out = np.unravel_index(c.searchsorted(rng.uniform(0,c[-1])),grid.shape)