Basé sur les probabilités de p, si p Par exemple:
['A', 'E'] ['C', 'D', 'E'] ['A'] ['A', 'C'] ['E']
La sortie est :
[ 0.46565909 0.741431 0.65590764 0.87347741 0.38465195] [ 0.62172525 0.80688763 0.40391766 0.28042554 0.34544989] [ 0.00138961 0.56959351 0.69043625 0.59473154 0.84042555] [ 0.18535428 0.63470281 0.27882709 0.78731892 0.63624727] [ 0.89383216 0.72008758 0.66048462 0.94064897 0.1484418 ]
Donc, en fonction des probabilités, j'aimerais que ma sortie soit:
for i in range(5): list1 = ['A', 'B', 'C', 'D', 'E'] p = np.random.uniform(low= 0.0, high= 1.0, size=5) print(p)
4 Réponses :
Utilisez np.where
pour obtenir les indices dont les valeurs sont inférieures à 0,5, puis imprimez ces éléments:
for i in range(5): list1 = ['A', 'B', 'C', 'D', 'E'] mask = np.where(np.random.uniform(low= 0.0, high= 1.0, size=5) < 0.5) print([list1[i] for i in mask[0]]) #output (The output is stochastic meaning they will change on each iteration unless you use fixed random state) ['C'] ['A', 'B', 'C', 'E'] ['D', 'E'] ['A', 'C', 'D'] ['B', 'C', 'E']
Une façon de résoudre ce problème est avec np.where, comme suggéré dans une autre réponse ici.
Alternativement, dans le style de la programmation fonctionnelle, filtrez la liste de lettres par une fonction qui "lance la pièce", à savoir:
(letter for letter in list1 if np.random.uniform() < 0.5)
Ou, de manière équivalente:
filter(lambda letter: np.random.uniform() < 0.5, list1)
vous pouvez appliquer directement moins que l'opérateur si vous changez votre liste
en tableau numpy
['C'] ['A' 'D'] ['A' 'B' 'C' 'D'] ['A' 'B' 'E'] ['A' 'B' 'D']
Sortie:
XXX
Juste une autre option:
[ [l for r, l in zip(np.random.uniform(low= 0.0, high= 1.0, size=5), list1) if r > 0.5] for i in range(5) ] #=> [['A'], ['D', 'E'], ['B', 'C'], ['D'], ['B', 'C', 'E']]
si p <0.5: print (list1 [i])
?eh bien, la probabilité signifie que vous n'aurez pas cette sortie ... mais que vous pouvez avoir cette sortie ...