python - numpy中的随机值在哪里

标签 python arrays python-3.x numpy

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

我有一个充满 bool 值的 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)

我想根据条件将它转换成一个值数组:

If the value is True return a randomly chosen number from [-1, 0, 1], or return 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])

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])

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

最佳答案

out = np.random.randint(-1, 2, multiples.shape)
out[~multiples] = 0

关于python - numpy中的随机值在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562893/

相关文章:

c - 枚举数组中所有连续值的三元组

java - 将文本读入二维数组

python - numpy trapz 行为在 x 值处具有双重定义的 y 值(冲突点)

python - 在theano中扫描不同维度的张量

c - 数组和指针表示法

python - 使用比较函数的排序函数

python - Python 的 id() 有多独特?

python - 将log转成json存入内存

python - 防止异常终止 Python 迭代器

python - 在 VPS 上运行 Selenium webdriver 时出现各种 Urllib2 错误