La mia domanda è: come posso generare numeri casuali non ripetitivi in numpy?Numero casuale non ripetitivo in numpy
list = np.random.random_integers(20,size=(10))
La mia domanda è: come posso generare numeri casuali non ripetitivi in numpy?Numero casuale non ripetitivo in numpy
list = np.random.random_integers(20,size=(10))
Se non si ostini a usare NumPy, è possibile utilizzare random.sample()
dalla libreria standard:
print random.sample(range(20), 10)
Con NumPy, si dovrà utilizzare numpy.random.shuffle()
e affettare:
a = numpy.arange(20)
numpy.random.shuffle(a)
print a[:10]
sufficiente generare una matrice che contiene l'intervallo desiderato di numeri, poi mescolarle ripetutamente scambiando uno casuale con l'elemento 0th nella matrice. Questo produce una sequenza casuale che non contiene valori duplicati.
Un'altra proprietà della sequenza casuale risultante è che [non è particolarmente casuale] (http: //www.codinghorror .com/blog/2007/12/il-pericolo-di-naivete.html). –
@SvenMarnach - Per la maggior parte degli scopi, tuttavia, è abbastanza casuale. Poteva usare l'approccio a doppio casuale se lo voleva più casuale. – Polynomial
Questo è inutile. L'OP può utilizzare le chiamate alle librerie per farlo correttamente. Sono più facili da usare, funzionano più velocemente e sono più leggibili rispetto a una versione personalizzata. Non riesco a pensare ad alcun motivo per cui dovrei usare un algoritmo sbagliato qui solo perché probabilmente è "abbastanza casuale", quando l'algoritmo giusto non ha alcun svantaggio. –
I pensare numpy.random.sample
non funziona bene, ora. Questo è il mio modo:
import numpy as np
np.random.choice(range(20), 10, replace=False)
Invece di 'range (n)' (o 'arange (n)') come primo argomento di 'choice', è equivalente al solo passaggio' n', ad es. 'choice (20, 10, replace = False)'. –
Cosa intendi per "non ripetitivo"? Che la sequenza di numeri casuali non ricorre mai? Questo non è possibile, dal momento che lo stato del generatore di numeri casuali deve adattarsi alla memoria finita di un computer. O vuoi dire che nessun numero singolo si verifica due volte? –
Non ripetitivo significa che hai una lista senza duplicati. – Polynomial
Forse hai bisogno di una permutazione casuale? http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.permutation.html – cyborg