2011-12-14 21 views
30

Soruma göre: Yinelenmeyen rastgele sayıları nasıl yazabilirim?Nümerik olmayan rasgele sayı sayıları

list = np.random.random_integers(20,size=(10)) 
+0

"Tekrar etmeden" ile ne demek istiyorsun? Rastgele sayıların dizisi asla tekrarlanmıyor mu? Rastgele sayı üretecinin durumunun bir bilgisayarın sınırlı belleğine sığması gerektiğinden, bu mümkün değildir. Yoksa, iki kere tek bir numara olmadığı anlamına mı geliyor? –

+3

Tekrar tekrarlama, yinelenmeyen bir listeniz olduğu anlamına gelir. – Polynomial

+1

Belki de rastgele bir permütasyona ihtiyacınız var mı? http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.permutation.html – cyborg

cevap

40

Eğer numpy kullanmakta ısrar yoksa, standart kitaplığından random.sample() kullanabilirsiniz:

a = numpy.arange(20) 
numpy.random.shuffle(a) 
print a[:10] 
+0

print random.ample (aralık (20), 10) python 2.6 ile çalışmaz mı ?! – Academia

+1

@ user1038382: Benim için çalışıyor. "Çalışmıyor" ne demektir? –

+0

Bana bu hatayı veriyor: "tanımlanmamış değişken: rasgele" – Academia

-2

Bunun ardından, sayı gerekli aralığını ihtiva eden bir dizi oluşturmak sürekli dizideki 0. elemanı ile rastgele bir takas bunları karıştırın. Bu, yinelenen değerler içermeyen rastgele bir dizi üretir.

+1

Elde edilen rastgele dizinin diğer bir özelliği de, özellikle [rastgele değil] (http: //www.codinghorror) .com/blog/2007/12 /-tehlike-of-naivete.html). –

+0

@SvenMarnach - Çoğu amaç için olsa da, yeterince rastgele. Daha rastgele istiyorsa çift-rasgele yaklaşımı kullanabilirdi. – Polynomial

+0

Bu anlamsız. OP, doğru yapmak için kütüphane çağrılarını kullanabilir. Kullanımı daha kolaydır, daha hızlı çalışırlar ve özel bir sürümden daha okunabilirler. Doğru algoritmanın hiçbir dezavantajı olmadığında, muhtemelen "rastgele" olduğu için yanlış bir algoritma kullanmam için herhangi bir sebep düşünemiyorum. –

43

I: numpy ile

print random.sample(range(20), 10) 

, sen numpy.random.shuffle() ve dilimleme kullanmak zorunda olacak numpy.random.sample şimdi doğru çalışmıyor. Bu benim yöntemim:

import numpy as np 
np.random.choice(range(20), 10, replace=False) 
+10

'' 'seçeneğinin ilk argümanı olarak' (n ''(ya da' arange (n) ') aralığı yerine,' n' geçişine eşdeğerdir, ör. 'seçim (20, 10, yerine = Yanlış)'. –

İlgili konular