Số ngẫu nhiên Python trong khoảng từ 0 đến 1 với xác suất

Chương này được trích từ cuốn sách A Primer on Scientific Programming with Python của H. P. Langtangen, tái bản lần thứ 5, Springer, 2016

Python có một mô-đun

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 để tạo số ngẫu nhiên. Lệnh gọi hàm
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
4 tạo ra một số ngẫu nhiên trong khoảng thời gian nửa mở \[ [0, 1] \] [hãy nhớ rằng trong khoảng thời gian nửa mở \[ [0,1] \] bao gồm giới hạn dưới, nhưng giới hạn trên là . Chúng ta có thể thử nó

>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454

Tất cả các tính toán của số ngẫu nhiên đều dựa trên thuật toán xác định [xem Bài tập 20. phương trình sai phân cho các số ngẫu nhiên chẳng hạn], do đó dãy số không thể thực sự ngẫu nhiên. Tuy nhiên, dãy số dường như thiếu bất kỳ mẫu nào và do đó chúng ta có thể xem các số là ngẫu nhiên.

Hạt giống

Mỗi khi chúng tôi nhập

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3, chuỗi cuộc gọi
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
4 tiếp theo sẽ mang lại các số khác nhau. Đối với mục đích gỡ lỗi, sẽ rất hữu ích khi nhận được cùng một chuỗi số ngẫu nhiên mỗi khi chúng tôi chạy chương trình. Chức năng này có được bằng cách đặt hạt giống trước khi chúng tôi bắt đầu tạo số. Với một giá trị cho trước của seed sẽ sinh ra một và chỉ một dãy số. Hạt giống là một số nguyên và được thiết lập bởi hàm
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
7

Hãy để chúng tôi tạo hai chuỗi số ngẫu nhiên cùng một lúc, sử dụng khả năng hiểu danh sách và định dạng chỉ có hai số thập phân

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']

Nếu chúng ta đặt hạt giống thành 2 một lần nữa, chuỗi số sẽ được tạo lại

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']

Nếu chúng tôi không đưa ra một hạt giống, mô-đun

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 sẽ thiết lập một hạt giống dựa trên thời gian hiện tại. Tức là mỗi lần chạy chương trình, seed sẽ khác nhau và do đó dãy số ngẫu nhiên cũng sẽ khác khi chạy chương trình. Đây là những gì chúng tôi muốn trong hầu hết các ứng dụng. Tuy nhiên, chúng tôi luôn khuyên bạn nên đặt hạt giống trong quá trình phát triển chương trình để đơn giản hóa việc gỡ lỗi và xác minh

Số ngẫu nhiên phân bố đều

Các số được tạo bởi

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
4 có xu hướng phân bố đều giữa 0 và 1, nghĩa là không có phần nào của khoảng \[ [0,1] \] có nhiều số ngẫu nhiên hơn các phần khác. Ta nói rằng phân bố của các số ngẫu nhiên trong trường hợp này là đều. Hàm
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
0 tạo các số ngẫu nhiên đồng nhất trong nửa khoảng thời gian mở \[ [a,b] \], trong đó người dùng có thể chỉ định \[ a \] và \[ b \]. Với chương trình sau [trong file uniform_numbers0. py], chúng tôi có thể tạo nhiều số ngẫu nhiên trong khoảng thời gian \[ [-1,1] \] và trực quan hóa cách chúng được phân phối

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
1

Hình 1 cho thấy giá trị của 500 số này và như đã thấy, các số dường như ngẫu nhiên và được phân phối đồng đều giữa \[ -1 \] và \[ 1 \]

Hình 1. Giá trị của 500 số ngẫu nhiên được rút ra từ phân phối đồng đều trên \[ [-1,1] \]

Trực quan hóa phân phối

Điều thú vị là xem các số ngẫu nhiên \[ N \] trong một khoảng \[ [a,b] \] được phân phối như thế nào trong suốt khoảng đó, đặc biệt là \[ N\rightarrow\infty \]. Ví dụ: khi vẽ các số từ phân phối đồng đều, chúng tôi hy vọng rằng không có phần nào của khoảng nhận được nhiều số hơn các phần khác. Để trực quan hóa phân phối, chúng ta có thể chia khoảng thành các khoảng con và hiển thị có bao nhiêu số trong mỗi khoảng con

Hãy để chúng tôi xây dựng phương pháp này chính xác hơn. Chúng tôi chia khoảng \[ [a,b] \] thành \[ n \] các khoảng con có kích thước bằng nhau, mỗi khoảng có độ dài \[ h=[b-a]/n \]. Những khoảng con này được gọi là thùng. Sau đó, chúng ta có thể vẽ \[ N \] số ngẫu nhiên bằng cách gọi

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
4 \[ N \] lần. Gọi \[ \hat H[i] \] là số lượng các số ngẫu nhiên rơi vào bin no. \[ i \], \[ [a+ih, a+[i+1]h] \], \[ i=0,\ldots,n-1 \]. Nếu \[ N \] nhỏ, giá trị của \[ \hat H[i] \] có thể khá khác nhau đối với các ngăn khác nhau, nhưng khi \[ N \] tăng lên, chúng tôi hy vọng rằng \[ \hat H[i

Lý tưởng nhất là chúng ta sẽ quan tâm đến cách các số ngẫu nhiên được phân phối dưới dạng \[ N\rightarrow\infty \] và \[ n\rightarrow\infty \]. Một nhược điểm lớn là \[ \hat H[i] \] tăng khi \[ N \] tăng và nó giảm khi \[ n \]. Số lượng \[ \hat H[i]/N \], được gọi là tần số đếm, sẽ đạt đến giới hạn hữu hạn là \[ N\rightarrow\infty \]. Tuy nhiên, \[ \hat H[i]/N \] sẽ ngày càng nhỏ hơn khi chúng ta tăng số lượng ngăn. Đại lượng \[ H[i] = \hat H[i]/[Nh] \] đạt đến giới hạn hữu hạn là \[ N,n\rightarrow\infty \]. Xác suất để một số ngẫu nhiên nằm trong khoảng con không. \[ i \] thì \[ \hat H[i]/N = H[i]h \]

Chúng ta có thể hình dung \[ H[i] \] dưới dạng sơ đồ thanh [xem Hình 2], được gọi là biểu đồ chuẩn hóa. Chúng ta cũng có thể định nghĩa một hàm hằng số từng phần \[ p[x] \] từ \[ H[i] \]. \[ p[x] = H[i] \] cho \[ x\in [a+ih, a+[i+1]h] \], \[ i=0,\ldots,n-1 \]. Khi \[ n,N\rightarrow\infty \], \[ p[x] \] tiến dần đến hàm mật độ xác suất của phân bố đang xét. Ví dụ:

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
0 rút ra các số từ phân phối đều trên \[ [a,b] \], và hàm mật độ xác suất là hằng số, bằng \[ 1/[b-a] \]. Khi chúng ta tăng \[ n \] và \[ N \], do đó, chúng ta mong đợi \[ p[x] \] tiệm cận với hằng số \[ 1/[b-a] \]

Hàm

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
3 từ
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
4 trả về hai mảng
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
5 và
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
6 sao cho
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
7 biểu thị hàm hằng số từng phần \[ p[x] \]. Do đó, cốt truyện là biểu đồ của tập hợp các mẫu ngẫu nhiên. Chương trình dưới đây minh họa cách sử dụng

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
9

Hình 2 cho thấy hai ô tương ứng với \[ N \] được lấy là \[ 10^3 \] và \[ 10^6 \]. Đối với \[ N \] nhỏ, chúng ta thấy rằng một số khoảng có nhiều số ngẫu nhiên hơn các khoảng khác, nhưng khi \[ N \] tăng lên, phân bố của các số ngẫu nhiên ngày càng trở nên bằng nhau giữa các khoảng. Trong giới hạn \[ N\rightarrow\infty \], \[ p[x]\rightarrow 1 \], được minh họa bằng đồ thị

Hình 2. Biểu đồ của các số ngẫu nhiên được phân phối đồng đều trong 20 thùng

Bản vẽ vectorized của các số ngẫu nhiên

Có một mô-đun

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 trong gói Numerical Python, có thể được sử dụng để vẽ một mảng số ngẫu nhiên lớn có thể có một cách hiệu quả

>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
1

Do đó, có hai mô-đun

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 cần lưu ý. một trong thư viện Python tiêu chuẩn và một trong
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
10. Để vẽ các số được phân phối đồng đều, hai mô-đun
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 có giao diện giống nhau, ngoại trừ các chức năng từ mô-đun
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 của
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
10 có thêm tham số
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
14. Cả hai mô-đun cũng có chức năng
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
15 để cố định hạt giống

Bản vẽ véc tơ của các số ngẫu nhiên sử dụng mô-đun

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 của
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
10 hiệu quả vì tất cả các số được vẽ "cùng một lúc" bằng mã C nhanh. Bạn có thể đo mức tăng hiệu quả bằng hàm
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
18

Cảnh báo

Thật dễ dàng để thực hiện một

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
19 theo sau bởi một
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
90 hoặc có thể là
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
91 mà không nhận ra rằng hai câu lệnh nhập sau nhập một tên
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 từ
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
10 ghi đè lên cùng một tên đã được nhập trong
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
19. Kết quả là mô-đun ngẫu nhiên hiệu quả trở thành mô-đun từ
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
10. Một giải pháp khả thi cho vấn đề này là giới thiệu một tên khác cho mô-đun
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 của Python, giả sử

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
0

Một giải pháp khác là làm

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
97 và làm việc rõ ràng với
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
98

Tính giá trị trung bình và độ lệch chuẩn

Bạn có thể biết công thức tính giá trị trung bình của một tập hợp \[ n \] số \[ x_0,x_1,\ldots,x_{n-1} \]. $$ \begin{equation} x_m = \frac{1}{n}\sum_{j=0}^{n-1} x_j\tp \tag{1} \end{equation} $$ Mức độ lan truyền của . Một biến thể của [2] đọc là $$ \begin{equation} x_v = \frac{1}{n}\left[\sum_{j=0}^{n-1} x_j^2\right] - x_m^2

Độ lệch chuẩn $$ \begin{equation} x_s = \sqrt{x_v} \tag{6} \end{equation} $$ thường được sử dụng thay thế cho phương sai vì độ lệch chuẩn có cùng đơn vị với đơn vị đo lường . Một cách phổ biến để biểu thị đại lượng không chắc chắn \[ x \], dựa trên tập dữ liệu \[ x_0,\ldots,x_{n-1} \], từ mô phỏng hoặc phép đo vật lý, là \[ x_m \pm x_s \]. Điều này có nghĩa là \[ x \] có độ không đảm bảo của một độ lệch chuẩn \[ x_s \] đối với hai bên của giá trị trung bình \[ x_m \]. Với lý thuyết xác suất và thống kê, người ta có thể cung cấp nhiều biện pháp khác, chính xác hơn về sự không chắc chắn, nhưng đó là chủ đề của một khóa học khác

Dưới đây là một ví dụ trong đó chúng tôi vẽ các số từ phân phối đồng đều trên \[ [-1,1] \] và tính toán sự thay đổi của giá trị trung bình và độ lệch chuẩn 10 lần trong quá trình thử nghiệm, sử dụng các công thức [1] và [3]-

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3

Bài kiểm tra

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
99 áp dụng hàm mod để kiểm tra xem một số có thể chia hết cho số khác mà không có số dư hay không. Bài kiểm tra
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
99 cụ thể ở đây là
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
11 khi
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
12 bằng 0,
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
13,
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
14, \[ \ldots \],
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
15, i. e. , 10 lần trong quá trình thực hiện vòng lặp. Chương trình có sẵn trong tệp
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
16. Chạy với \[ N=10^6 \] cho kết quả

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
2

Chúng tôi thấy rằng giá trị trung bình ngày càng nhỏ hơn và tiến gần đến 0 như mong đợi vì chúng tôi tạo các số giữa \[ -1 \] và \[ 1 \]. Giá trị lý thuyết của độ lệch chuẩn, như \[ N\rightarrow\infty \], bằng \[ \sqrt{1/3}\approx 0. 57735 \]

Chúng tôi cũng đã tạo một phiên bản vector hóa tương ứng của mã ở trên bằng cách sử dụng mô-đun

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
3 của
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
10 và các hàm tạo sẵn
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
19,
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
00 và
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
01 để tính giá trị trung bình, phương sai và độ lệch chuẩn [tương ứng] của một dãy số

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
8

Chương trình này có thể được tìm thấy trong tệp

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
02

Gaussian hoặc phân phối bình thường

Trong một số ứng dụng, chúng tôi muốn các số ngẫu nhiên tập trung xung quanh một giá trị cụ thể \[ m \]. Điều này có nghĩa là có nhiều khả năng tạo ra một số gần với \[ m \] hơn là ở xa \[ m \]. Một phân phối được sử dụng rộng rãi với tính chất định tính này là phân phối Gaussian hoặc bình thường. Ví dụ: phân phối thống kê về chiều cao hoặc huyết áp của những người trưởng thành thuộc một giới tính được mô tả rõ ràng bằng phân phối chuẩn. Phân phối chuẩn có hai tham số. giá trị trung bình \[ m \] và độ lệch chuẩn \[ s \]. Cái sau đo chiều rộng của phân phối, theo nghĩa là \[ s \] nhỏ làm cho nó ít có khả năng vẽ một số cách xa giá trị trung bình hơn và \[ s \] lớn làm cho nhiều khả năng vẽ một số ra xa

Các số ngẫu nhiên đơn lẻ từ phân phối chuẩn có thể được tạo bởi

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
0

trong khi việc tạo hiệu quả một mảng có độ dài

>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
15 được kích hoạt bởi

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
1

Chương trình sau đây rút ra

>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
15 số ngẫu nhiên từ phân phối chuẩn, tính toán giá trị trung bình và độ lệch chuẩn, đồng thời vẽ biểu đồ

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
2

Tệp chương trình tương ứng là

>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
05, có nghĩa là \[ -0. 00253 \] và độ lệch chuẩn bằng 0. 99970 khi chạy với
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
15 là 1 triệu,
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
07 là 0 và
>>> random.seed[2]
>>> ['%.2f' % random.random[] for i in range[7]]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random[] for i in range[7]]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
08 là 1. Hình 3 cho thấy các số ngẫu nhiên tập hợp xung quanh giá trị trung bình \[ m=0 \] trong biểu đồ. Biểu đồ được chuẩn hóa này, khi
>>> import random
>>> random.random[]
0.81550546885338104
>>> random.random[]
0.44913326809029852
>>> random.random[]
0.88320653116367454
15 tiến đến vô cùng, sẽ tiệm cận với hàm mật độ xác suất phân phối chuẩn, hình chuông, nổi tiếng

Làm cách nào để lấy mẫu một số ngẫu nhiên từ phân phối xác suất trong Python?

Lấy mẫu số ngẫu nhiên từ phân phối xác suất trong Python .
Được cho. số = [10, 20, 30] phân phối = [0. 3, 0. 2, 0. 5] Sản lượng dự kiến. Chọn ngẫu nhiên các phần tử từ danh sách đã cho và hiển thị 5 phần tử trong danh sách đầu ra. [30, 10, 20, 30, 30] Lưu ý. Đầu ra có thể thay đổi
cú pháp

Có ngẫu nhiên ngẫu nhiên bao gồm 0 và 1 trong Python không?

Định nghĩa và cách sử dụng . The random[] method returns a random floating number between 0 and 1.

Hàm nào cho một số ngẫu nhiên trong khoảng từ 0 đến 1?

The Toán. random[] hàm trả về một số dấu phẩy động, giả ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn 1, với phân phối xấp xỉ đồng đều trên phạm vi đó — sau đó bạn có thể chia tỷ lệ cho .

Random[] có bao gồm 0 và 1 không?

random[] tạo số thực ngẫu nhiên trong khoảng [0. 1, 1. 0]. [Xem phần mở và đóng ngoặc, có nghĩa là bao gồm 0 nhưng loại trừ 1 ]. Nó không nhận tham số và trả về các giá trị được phân phối đồng đều giữa 0 và 1.

Chủ Đề