2011-12-14 53 views
30

Câu hỏi của tôi là: Làm thế nào tôi có thể tạo ra các số ngẫu nhiên không lặp đi lặp lại trong gumpy?Số ngẫu nhiên không lặp đi lặp lại trong numpy

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

Bạn có ý nghĩa gì bởi "không lặp lại"? Rằng dãy số ngẫu nhiên không bao giờ tái diễn? Điều này là không thể, vì trạng thái của bộ tạo số ngẫu nhiên cần phải phù hợp với bộ nhớ hữu hạn của máy tính. Hoặc bạn có nghĩa là không có số duy nhất xảy ra hai lần? –

+3

Không lặp đi lặp lại có nghĩa là bạn có một danh sách không có bản sao. – Polynomial

+1

Có lẽ bạn cần một hoán vị ngẫu nhiên? http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.permutation.html – cyborg

Trả lời

40

Nếu bạn không nhấn mạnh về việc sử dụng NumPy, bạn có thể sử dụng random.sample() từ thư viện tiêu chuẩn:

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

Với NumPy, bạn sẽ phải sử dụng numpy.random.shuffle() và cắt:

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

print random.sample (phạm vi (20), 10) không hoạt động với python 2.6 ?! – Academia

+1

@ user1038382: Làm việc cho tôi. "Không hoạt động" nghĩa là gì? –

+0

Cung cấp cho tôi lỗi này: "biến không xác định: ngẫu nhiên" – Academia

-2

Chỉ cần tạo một mảng có chứa phạm vi số yêu cầu, sau đó trộn chúng bằng cách liên tục hoán đổi một số ngẫu nhiên với phần tử thứ 0 trong mảng. Điều này tạo ra một chuỗi ngẫu nhiên không chứa các giá trị trùng lặp.

+1

Một thuộc tính khác của chuỗi ngẫu nhiên kết quả là [nó không đặc biệt ngẫu nhiên] (http: //www.codinghorror .com/blog/2007/12/the-danger-of-naivete.html). –

+0

@SvenMarnach - Đối với hầu hết các mục đích, mặc dù, nó là ngẫu nhiên đủ. Anh có thể sử dụng cách tiếp cận ngẫu nhiên đôi nếu anh muốn nó ngẫu nhiên hơn. – Polynomial

+0

Điều này là vô nghĩa. OP có thể sử dụng các cuộc gọi thư viện để làm điều đó đúng. Chúng dễ sử dụng hơn, chạy nhanh hơn và dễ đọc hơn phiên bản tùy chỉnh. Tôi không thể nghĩ ra bất kỳ lý do nào tại sao tôi nên sử dụng một thuật toán sai ở đây chỉ vì nó có lẽ là "đủ ngẫu nhiên", khi sử dụng thuật toán đúng không có bất lợi. –

43

tôi nghĩ rằng numpy.random.sample không hoạt động ngay bây giờ. Đây là cách của tôi:

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

Thay vì 'range (n)' (hoặc 'arange (n)') làm đối số đầu tiên của 'choice', nó tương đương với chỉ truyền' n', ví dụ: 'lựa chọn (20, 10, thay thế = Sai)'. –

Các vấn đề liên quan