当条件为 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 return0
.
所以在上面的例子中,我想输出如下:
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/