我有一个二维的布尔值列表。我想从值是的列表中选择一个随机索引False
。例如,给出以下列表:
[[True, False, False],
[True, True, True],
[False, True, True]]
有效的选择是:[0, 1]
,[0, 2]
,和[2, 0]
。
我可以保留一个有效索引的列表,然后用于random.choice
从中进行选择,但是每次仅当此目的更改基础列表时,保留变量并对其进行更新就显得有些不合逻辑。
如果您的答案运行迅速,将获得加分。
我们可以像这样使用oneliner:
import numpy as np
from random import choice
choice(np.argwhere(~a))
与a
布尔数组。
这个工作原理如下:通过使用~a
,我们否定了数组中的元素。接下来,我们np.argwhere
用来构造k×2数组:一个数组,其中每一行都有两个元素:对于每个维,该值使相应的值具有as值False
。
通过choice(..)
我们这样选择一个随机行。但是,我们不能直接使用它来访问元素。我们可以使用tuple(..)
构造函数将其转换为元组:
>>> tuple(choice(np.argwhere(~a)))
(2, 0)
因此,您可以通过以下方式获取元素:
t = tuple(choice(np.argwhere(~a)))
a[t]
但是,当然,这并不奇怪:
>>> t = tuple(choice(np.argwhere(~a)))
>>> a[t]
False
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句