cuốn sách gpt4 ai đã làm

python - Chính xác thì Random.random làm gì?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:04:23 30 4
mua khóa gpt4 Nike

    ngẫu nhiên.shuffle(lst_shuffle, ngẫu nhiên.random)

Tôi biết phần sau là tham số tùy chọn. Nhưng chính xác thì nó làm gì. Tôi không hiểu điều này có nghĩa là gì.
Đây là từ tài liệu.

Random.random()¶ Trả về số dấu phẩy động ngẫu nhiên tiếp theo trong phạm vi [0,0, 1,0).



Tôi cũng thấy nó, đây có phải là phạm vi 0,0, 1,0 nghĩa là gì không?
Trình tạo số giả ngẫu nhiên
Hầu hết, nếu không phải tất cả các ngôn ngữ lập trình đều có thư viện bao gồm mã giả ngẫu nhiên
trình tạo số. Trình tạo số này thường trả về một số ngẫu nhiên trong khoảng từ 0 đến 1 (không phải
bao gồm 1). Trong một trình tạo hoàn hảo, tất cả các số đều có cùng xác suất được chọn nhưng
trong các bộ tạo giả, một số số có xác suất bằng 0.

câu trả lời hay nhất

Các câu trả lời hiện có giải quyết khá tốt các chi tiết cụ thể của câu hỏi, nhưng tôi nghĩ nó đáng để hỏi như một câu hỏi phụ: tại sao bạn đặc biệt muốn chuyển một "trình tạo ngẫu nhiên" thay thế cho xáo trộnngẫu nhiên Ngược lại với các chức năng khác trong mô-đun. trích dẫn tài liệu :

Lưu ý rằng đối với len(x) thậm chí khá nhỏ, tổng số hoán vị của x lớn hơn chu kỳ của hầu hết các bộ tạo số ngẫu nhiên; điều này ngụ ý rằng hầu hết các hoán vị của một chuỗi dài không bao giờ có thể được tạo ra.



Cụm từ "trình tạo số ngẫu nhiên" ở đây đề cập đến thuật ngữ mang tính mô phạm hơn. . giả mạo - Trình tạo số ngẫu nhiên - một trình tạo mô phỏng tính ngẫu nhiên rất tốt nhưng hoàn toàn mang tính thuật toán nên có tên như vậy KHÔNG là "thực sự ngẫu nhiên". Bất kỳ cách tiếp cận thuật toán nào như thế này đều sẽ có một "chu kỳ" - cuối cùng nó sẽ bắt đầu lặp lại.

Python ngẫu nhiênMô-đun này sử dụng một trình tạo giả ngẫu nhiên đặc biệt tốt và được nghiên cứu kỹ lưỡng, Mersenne Twister , chu kỳ là 2**19937-1 -- Các số vượt quá 6000 chữ số khi được viết dưới dạng chữ số thập phân, ví dụ: len(str(2**19937-1))Sẽ xác nhận ;-). Trên máy tính xách tay của tôi, tôi có thể tạo ra khoảng 5 triệu số như thế này mỗi giây:
$ python -mtimeit -s'import ngẫu nhiên' 'random.random()'
1000000 vòng lặp, tốt nhất là 3: 0,214 usec mỗi vòng lặp

Giả sử một cỗ máy nhanh hơn có khả năng tạo ra một tỷ con số này mỗi giây, chu kỳ sẽ mất khoảng 105.985 năm để lặp lại - và ước tính tốt nhất hiện nay về tuổi của vũ trụ là nhỏ hơn 1,5*1012 năm một chút. Vì vậy, sẽ phải mất một thời gian tồn tại gần như không thể tưởng tượng được của vũ trụ để đạt đến điểm lặp lại ;-). Việc tính toán song song không giúp được gì nhiều. Người ta ước tính rằng có khoảng 1080 nguyên tử trong vũ trụ, vì vậy ngay cả khi bạn có thể chạy một máy phát tốc độ một tỷ mỗi giây như vậy trên mỗi nguyên tử trong vũ trụ, thì vẫn phải mất hơn 105.800 thời gian sống của vũ trụ để bắt đầu lặp lại.

Vì vậy, bạn có thể có lý do để nghi ngờ rằng mối quan tâm về sự trùng lặp này là một vấn đề lý thuyết hơn là vấn đề thực tế ;-).

Tuy nhiên, giai thừa (tính toán hoán vị của chuỗi có độ dài N) cũng tăng khá nhanh. Ví dụ, Mersenne Twister có thể tạo ra tất cả các hoán vị của một chuỗi có độ dài 2080, nhưng nó sẽ không bao giờ có thể tạo ra các chuỗi có độ dài 2081 hoặc cao hơn. Mối quan tâm của tài liệu về "len(x)" thậm chí khá nhỏ sẽ có ý nghĩa nếu nó không liên quan đến vấn đề "thời gian tồn tại của vũ trụ" - chúng tôi 了解Miễn là chúng tôi có một chuỗi dài hợp lý, chúng tôi sẽ không bao giờ có thể đạt được nhiều hoán vị có thể có bằng cách xáo trộn với một RNG giả như vậy, vì vậy người ta có thể lo lắng về loại sai lệch mà chúng tôi thực sự sẽ đưa ra bằng cách xáo trộn một vài lần! :-)

os.urandomTruy cập trung gian vào bất kỳ nguồn ngẫu nhiên vật lý nào do hệ điều hành cung cấp-- Mật mãGenRandomTrên Windows, /dev/urandomTrên Linux, v.v. os.urandomđưa ra một chuỗi byte, nhưng trong struct Thật dễ dàng để biến chúng thành số ngẫu nhiên với sự trợ giúp của:
>>> n = struct.calcsize('I')
>>> def s2i(s): return struct.unpack('I', s)[0]
...
>>> maxi = s2i(b'\xff'*n) + 1
>>> maxi = float(s2i(b'\xff'*n) + 1)
>>> def rnd(): return s2i(os.urandom(n))/maxi

Bây giờ chúng ta có thể gọi ngẫu nhiên.shuffle(somelist, rnd)Đừng lo lắng về sự thiên vị ;-).

Thật không may, các phép đo cho thấy phương thức RNG này chậm hơn so với việc gọi ngẫu nhiên.random() Chậm hơn khoảng 50 lần. - Đây có thể là một cân nhắc thực tế quan trọng nếu chúng ta cần nhiều số ngẫu nhiên (và nếu không thì chúng ta sẽ lo lắng về những sai lệch có thể bị đặt nhầm chỗ ;-). os.urandomCác phương pháp cũng khó sử dụng theo cách có thể lặp lại và có thể dự đoán được (ví dụ: cho mục đích thử nghiệm), trong khi sử dụng ngẫu nhiên.random()Bạn chỉ cần cung cấp tên viết tắt cố định ngẫu nhiên.seedkhi bắt đầu thử nghiệm để đảm bảo hành vi có thể lặp lại.

Vì vậy, trong thực tế, os.urandomChỉ sử dụng nếu bạn cần các số không có "chất lượng mật mã" - các số ngẫu nhiên mà kẻ tấn công xác định không thể dự đoán được - và do đó sẵn sàng trả tiền để sử dụng nó thay thế ngẫu nhiên.random Trả giá thực tế.

Về python - chính xác thì Random.random đang làm gì, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/1961340/

30 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress