我有一个带布尔值的1D(numpy)数组。例如:
x = [True, True, False, False, False, True, False, True, True, True, False, True, True, False]
该数组包含8
个真值。例如,我想保持3
(在这种情况下必须小于8
)作为存在的8
随机的真值。换句话说,我想将这些5
真值的8
随机设置为False。
可能的结果可能是:
x = [True, True, False, False, False, False, False, False, False, False, False, False, True, False]
如何实施?
答案 0 :(得分:4)
一种方法是 -
# Get the indices of True values
idx = np.flatnonzero(x)
# Get unique indices of length 3 less than the number of indices and
# set those in x as False
x[np.random.choice(idx, len(idx)-3, replace=0)] = 0
示例运行 -
# Input array
In [79]: x
Out[79]:
array([ True, True, False, False, False, True, False, True, True,
True, False, True, True, False], dtype=bool)
# Get indices
In [80]: idx = np.flatnonzero(x)
# Set 3 minus number of True indices as False
In [81]: x[np.random.choice(idx, len(idx)-3, replace=0)] = 0
# Verify output to have exactly three True values
In [82]: x
Out[82]:
array([ True, False, False, False, False, False, False, True, False,
False, False, True, False, False], dtype=bool)
答案 1 :(得分:0)
使用所需数量True
和False
构建一个数组,然后将其改组
import random
def buildRandomArray(size, numberOfTrues):
res = [False]*(size-numberOfTrues) + [True]*numberOfTrues
random.shuffle(res)
return res