Moje pytanie brzmi: Jak wygenerować niepowtarzalne liczby losowe w numpy?Niepowtarzalna liczba losowa w numpy
list = np.random.random_integers(20,size=(10))
Moje pytanie brzmi: Jak wygenerować niepowtarzalne liczby losowe w numpy?Niepowtarzalna liczba losowa w numpy
list = np.random.random_integers(20,size=(10))
Jeśli nie nalegać na użyciu numpy można użyć random.sample()
z biblioteki standardowej:
print random.sample(range(20), 10)
Z NumPy, trzeba będzie użyć numpy.random.shuffle()
i krojenia:
a = numpy.arange(20)
numpy.random.shuffle(a)
print a[:10]
prostu utworzy tablicę, która zawiera żądany zakres numerów, a następnie losowo je wielokrotnie wymiany losowo jeden z 0th elementu tablicy. Powoduje to losową sekwencję, która nie zawiera zduplikowanych wartości.
Inną właściwością wynikowej losowej sekwencji jest to, że [nie jest szczególnie przypadkowa] (http: //www.codinghorror .com/blog/2007/12/the-danger-of-naivete.html). –
@SvenMarnach - Dla większości celów jest to jednak dość przypadkowe. Mógłby użyć podejścia podwójnie losowego, gdyby chciał, żeby był bardziej losowy. – Polynomial
To jest bezcelowe. OP może korzystać z wywołań biblioteki, aby zrobić to dobrze. Są łatwiejsze w użyciu, działają szybciej i są bardziej czytelne niż wersja niestandardowa. Nie mogę wymyślić żadnego powodu, dla którego powinienem użyć niewłaściwego algorytmu właśnie dlatego, że jest on prawdopodobnie "dość przypadkowy", kiedy użycie odpowiedniego algorytmu nie ma żadnej wady. –
I myśl numpy.random.sample
nie działa poprawnie, teraz. To jest mój sposób:
import numpy as np
np.random.choice(range(20), 10, replace=False)
Zamiast 'range (n)' (lub 'arange (n)') jako pierwszego argumentu 'choice', jest równoznaczne z przekazaniem' n', np. 'choice (20, 10, replace = False)'. –
Co masz na myśli przez "niepowtarzalny"? Że ciąg liczb losowych nigdy się nie powtórzy? Nie jest to możliwe, ponieważ stan generatora liczb losowych musi pasować do skończonej pamięci komputera. Czy masz na myśli, że żadna pojedyncza liczba nie występuje dwukrotnie? –
Nie powtórzenie oznacza, że masz listę bez duplikatów. – Polynomial
Być może potrzebujesz losowej permutacji? http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.permutation.html – cyborg