Một cách khác có thể để có được một bản phân phối rời rạc mà trông giống như phân phối chuẩn là để rút ra từ một phân phối đa thức nơi xác suất được tính từ phân bố chuẩn.
import scipy.stats as ss
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10, 11)
xU, xL = x + 0.5, x - 0.5
prob = ss.norm.cdf(xU, scale = 3) - ss.norm.cdf(xL, scale = 3)
prob = prob/prob.sum() #normalize the probabilities so their sum is 1
nums = np.random.choice(x, size = 10000, p = prob)
plt.hist(nums, bins = len(x))
Ở đây, np.random.choice
chọn số nguyên từ [-10, 10]. Xác suất chọn phần tử, nói 0, được tính bằng p (-0.5 < x < 0.5) trong đó x là biến ngẫu nhiên bình thường với giá trị trung bình bằng không và độ lệch chuẩn 3. Tôi chọn std. dev. như 3 vì cách p này (-10 < x < 10) là xấp xỉ bằng 1.
Kết quả trông như thế này:
Sự phân bố bình thường là liên tục theo định nghĩa, vì vậy câu trả lời cho câu hỏi này phụ thuộc vào cách bạn muốn tiết lộ nó. Một giải pháp có thể là lấy mẫu từ 'np.random.normal' và làm tròn kết quả thành một số nguyên. –