numpy 中的随机值,其中

Kar*_*tik 5 python arrays numpy python-3.x

当条件为 时,我试图获取一系列随机选择的数字True

我有一个充满布尔数字的 NumPy 数组:

In [1]: multiples
Out[1]: array([False, False, False,  True,  True, False, False, False, False,
               False, False, False, False, False, False, False, False, False,
               False, False, False, False, False, False, False, False, False,
               False, False,  True,  True,  True,  True, False, False, False,
               False, False, False,  True,  True, False,  True,  True, False,
               False, False, False,  True,  True, False, False, False, False,
               False, False, False, False, False, False, False, False, False,
               False, False, False, False, False, False, False, False, False,
               False, False, False, False, False, False,  True,  True, False,
               False, False, False, False,  True,  True,  True, False,  True,
                True, False, False, False,  True,  True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

我想根据条件将其转换为值数组:

如果该值是True从 中返回一个随机选择的数字[-1, 0, 1],或者返回0

因此,在上面的示例中,我希望输出如下所示:

Out[2]: array([ 0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0, -1,  0,  0, -1,  0,  0,  0,  0, -1,  1,  0,
                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,  0,  0, -1,  1,  0,  0,  0,  0,  0,
                1, -1, -1,  0,  1,  0,  0,  0,  0,  0,  0,  0])
Run Code Online (Sandbox Code Playgroud)

numpy.where()几乎给了我我想要的:

In [3]: numpy.where(multiples, numpy.random.choice([-1, 0, 1], 1), 0)
Out[3]: array([ 0,  0,  0, -1, -1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, -1, -1, -1, -1,  0,
                0,  0,  0,  0,  0, -1, -1,  0, -1, -1,  0,  0,  0,  0, -1, -1,  0,
                0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
                0,  0,  0,  0,  0,  0,  0,  0,  0,  0, -1, -1,  0,  0,  0,  0,  0,
               -1, -1, -1,  0, -1, -1,  0,  0,  0, -1, -1,  0])
Run Code Online (Sandbox Code Playgroud)

但问题是它只执行numpy.random.choice([-1, 0, 1], 1)一次,并保留该结果并在任何地方使用它。multiples我希望它在每次is的值时运行True

jmh*_*mhl 3

out = np.random.randint(-1, 2, multiples.shape)
out[~multiples] = 0
Run Code Online (Sandbox Code Playgroud)