我试图在条件为True
时得到一个随机选择的数字序列。numpy中的随机值
我有一个与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)
而且我想把它转换成价值的基础上,条件数组:
如果该值是
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])
有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
。
或使用'np.where':'np.where(倍数,np.random.randint(-1,2,multiples.shape),0)'。 – Divakar
以同样的方式,我可以使用'np.where(multiples,np.random.choice([ - 1,0,1],multiples.shape,replace = True),0)'。当我为什么没有想到这一点!?!感谢@jmhl和@Divakar。 – Kartik