2012-08-28 38 views
7

Tôi cần tạo một mảng lớn (hoặc danh sách) với số ngẫu nhiên (10⁵ số). Tôi đã cố gắng như thế:Mảng lớn với số ngẫu nhiên với python

vet = random.sample(range(10),100000) 

Nhưng khi tôi cố gắng chạy:

vet = random.sample(range(10),10000) 

File "/usr/lib/python2.7/random.py", dòng 320, trong mẫu tăng ValueError ("mẫu lớn hơn dân số") ValueError: mẫu lớn hơn dân số

Bất kỳ giải pháp nào?

tkns

+6

Xét kích thước của danh sách đó, bạn có thể muốn xem xét một thư viện mảng như [NumPy] (http://numpy.scipy.org/) : 'nhập khẩu sumpy; vet = numpy.random.randint (0, 10, 10000) ' – Snowball

Trả lời

19

gì bạn muốn là

[random.random() for _ in xrange(100000)] 

Từ random module documentation:

random.sample(population, k) Return a k length list of unique elements chosen from the population sequence. Used for random sampling without replacement.

nên khi gọi random.sample(range(10), 100000) bạn đang cố gắng trích xuất 100000 thành phần duy nhất trong chuỗi có độ dài 10 mà rõ ràng không thể hoạt động.

Lưu ý rằng

  • random.random() trả về một giá trị nổi giữa [0; 1)
  • random.randrange([start], stop[, step]) trả về một yếu tố ngẫu nhiên từ chuỗi range([start], stop[, step])
  • random.randint(a, b) trả về một giá trị số nguyên trong [a; b]
  • khi sử dụng random.sample, sự bình đẳng len(population) >= k phải giữ
8

Tôi nghĩ rằng bạn đang sau một cái gì đó như thế này:

vet = [random.randint(1,10) for _ in range(100000)] 
Các vấn đề liên quan