Mô-đun random của Numpy là một bộ hàm dựa trên việc sinh số giả ngẫu nhiên. Ngẫu nhiên nghĩa là thứ không thể dự đoán một cách logic.
np.random.seed() Function
Trong ví dụ này, bạn sẽ mô phỏng việc tung đồng xu. Bạn sẽ dùng hàm np.random(), hàm rút một số trong khoảng từ 0 đến 1 sao cho mọi số trong khoảng này đều có khả năng xuất hiện như nhau.
Nếu số bạn rút nhỏ hơn 0,5, với xác suất 50% xảy ra, bạn nói là mặt ngửa, còn lại là mặt sấp. Kiểu kết quả mà kết quả hoặc là True (Ngửa) hoặc là False (Sấp) được gọi là phép thử Bernoulli.
Số giả ngẫu nhiên hoạt động bằng cách bắt đầu với một số nguyên gọi là seed, rồi sinh các số liên tiếp nhau. Cùng một seed sẽ cho cùng một dãy số ngẫu nhiên, vì thế mới gọi là sinh số "giả" ngẫu nhiên. Nếu bạn muốn mã của mình có thể tái lập, nên gieo seed cho bộ sinh số ngẫu nhiên bằng hàm np.random.seed().
Để thực hiện các lần tung đồng xu, bạn import NumPy, gieo seed cho bộ sinh số ngẫu nhiên, rồi rút bốn số ngẫu nhiên. Bạn có thể chỉ định số lượng số ngẫu nhiên mong muốn với từ khóa size.
import numpy as np
np.random.seed(42)
random_numbers = np.random.random(size=4)
random_numbers
Được hỗ trợ bởi
array([0.3745012,0.95071431,0.73199394,0.59865848])Được hỗ trợ bởi
Số đầu tiên bạn nhận được nhỏ hơn 0,5, nên là mặt ngửa, còn ba số còn lại là mặt sấp. Bạn có thể hiển thị rõ điều này bằng phép so sánh nhỏ hơn, phép này trả về một mảng các giá trị boolean, True cho ngửa và False cho sấp.
Trong ví dụ sau, chúng ta muốn biết xác suất ra bốn lần ngửa nếu lặp lại bốn lần tung đồng xu nhiều lần. Ta có thể làm điều này với một vòng lặp for.
Đầu tiên, chúng ta khởi tạo biến đếm bằng không. Sau đó lặp lại 10.000 thử nghiệm gồm bốn lần tung. Nếu một thử nghiệm có bốn lần ngửa, ta tăng biến đếm.
Vậy xác suất ra cả bốn lần ngửa là bao nhiêu? Đó là số lần bạn được toàn ngửa chia cho tổng số thử nghiệm. Kết quả xấp xỉ 0,06.
n_all_heads =0# Initialize number of 4-heads trialsfor _ inrange(10000):
heads = np.random.random(size=4)<0.5
n_heads = np.sum(heads)if n_heads ==4:
n_all_heads +=1
n_all_heads /10000Được hỗ trợ bởi
Trong ví dụ này, chúng ta sẽ sinh rất nhiều số ngẫu nhiên giữa 0 và 1, rồi vẽ biểu đồ histogram của kết quả. Nếu các số thực sự ngẫu nhiên, mọi cột trong histogram sẽ có chiều cao (gần như) bằng nhau.
Đối với ví dụ này bạn sẽ cần:
Gieo seed cho bộ sinh số ngẫu nhiên bằng np.random.seed với seed 42.
Khởi tạo một mảng rỗng, random_numbers, gồm 100.000 phần tử để lưu các số ngẫu nhiên. Hãy chắc chắn dùng np.empty(100000) để thực hiện.
Viết một vòng lặp for để rút 100.000 số ngẫu nhiên bằng np.random.random(), lưu vào mảng random_numbers. Để làm vậy, lặp qua range(100000).
Vẽ histogram của random_numbers. Trường hợp này không cần gắn nhãn trục vì chúng ta chỉ đang kiểm tra bộ sinh số ngẫu nhiên.
# Seed the random number generator
np.random.seed(42)# Initialize random numbers: random_numbers
random_numbers = np.empty(100000)# Generate random numbers by looping over range(100000)for i inrange(100000):
random_numbers[i]= np.random.random()# Plot a histogram
_ = plt.hist(random_numbers)# Show the plot
plt.show()Được hỗ trợ bởi
Để tìm hiểu thêm về bộ sinh số ngẫu nhiên và thống kê kiểu hacker, vui lòng xem video này từ khóa học Statistical Thinking in Python (Phần 1) của chúng tôi.
Mô-đun random của Numpy là một bộ hàm dựa trên việc sinh số giả ngẫu nhiên. Ngẫu nhiên nghĩa là thứ không thể dự đoán một cách logic.
np.random.seed()FunctionTrong ví dụ này, bạn sẽ mô phỏng việc tung đồng xu. Bạn sẽ dùng hàm
np.random(), hàm rút một số trong khoảng từ 0 đến 1 sao cho mọi số trong khoảng này đều có khả năng xuất hiện như nhau.Nếu số bạn rút nhỏ hơn 0,5, với xác suất 50% xảy ra, bạn nói là mặt ngửa, còn lại là mặt sấp. Kiểu kết quả mà kết quả hoặc là True (Ngửa) hoặc là False (Sấp) được gọi là phép thử Bernoulli.
Số giả ngẫu nhiên hoạt động bằng cách bắt đầu với một số nguyên gọi là seed, rồi sinh các số liên tiếp nhau. Cùng một seed sẽ cho cùng một dãy số ngẫu nhiên, vì thế mới gọi là sinh số "giả" ngẫu nhiên. Nếu bạn muốn mã của mình có thể tái lập, nên gieo seed cho bộ sinh số ngẫu nhiên bằng hàm
np.random.seed().Để thực hiện các lần tung đồng xu, bạn import
NumPy, gieo seed cho bộ sinh số ngẫu nhiên, rồi rút bốn số ngẫu nhiên. Bạn có thể chỉ định số lượng số ngẫu nhiên mong muốn với từ khóasize.Số đầu tiên bạn nhận được nhỏ hơn 0,5, nên là mặt ngửa, còn ba số còn lại là mặt sấp. Bạn có thể hiển thị rõ điều này bằng phép so sánh nhỏ hơn, phép này trả về một mảng các giá trị boolean, True cho ngửa và False cho sấp.
Cuối cùng, bạn có thể tính số lần ngửa bằng cách cộng mảng boolean
heads, vì trong ngữ cảnh số học, Python coi True là một và False là không.Mô phỏng Bốn lần Tung Đồng xu Ngẫu nhiên
Trong ví dụ sau, chúng ta muốn biết xác suất ra bốn lần ngửa nếu lặp lại bốn lần tung đồng xu nhiều lần. Ta có thể làm điều này với một vòng lặp for.
Đầu tiên, chúng ta khởi tạo biến đếm bằng không. Sau đó lặp lại 10.000 thử nghiệm gồm bốn lần tung. Nếu một thử nghiệm có bốn lần ngửa, ta tăng biến đếm.
Vậy xác suất ra cả bốn lần ngửa là bao nhiêu? Đó là số lần bạn được toàn ngửa chia cho tổng số thử nghiệm. Kết quả xấp xỉ 0,06.
Ví dụ Tương tác về Sinh Số Ngẫu nhiên
Trong ví dụ này, chúng ta sẽ sinh rất nhiều số ngẫu nhiên giữa 0 và 1, rồi vẽ biểu đồ histogram của kết quả. Nếu các số thực sự ngẫu nhiên, mọi cột trong histogram sẽ có chiều cao (gần như) bằng nhau.
Đối với ví dụ này bạn sẽ cần:
np.random.seedvới seed42.số ngẫu nhiên. Hãy chắc chắn dùngnp.empty(100000)để thực hiện.forđể rút 100.000 số ngẫu nhiên bằngnp.random.random(), lưu vào mảngrandom_numbers. Để làm vậy, lặp quarange(100000).random_numbers. Trường hợp này không cần gắn nhãn trục vì chúng ta chỉ đang kiểm tra bộ sinh số ngẫu nhiên.Khi chạy đoạn mã trên, nó tạo ra kết quả sau:
Tự bạn thử nhé.
Để tìm hiểu thêm về bộ sinh số ngẫu nhiên và thống kê kiểu hacker, vui lòng xem video này từ khóa học Statistical Thinking in Python (Phần 1) của chúng tôi.
Nội dung này được trích từ khóa học Statistical Thinking in Python (Phần 1) của DataCamp do Justin Bois biên soạn.