【发布时间】:2016-01-02 05:23:04
【问题描述】:
当条件为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)
我想根据条件将其转换为值数组:
如果值为
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 时运行。
【问题讨论】:
标签: python arrays python-3.x numpy