在 python 中生成随机样本的所有你需要的示例列表
长按关注《Python学研大本营》,加入读者群,分享更多精彩 扫码关注《Python学研大本营》,加入读者群,分享更多精彩
在这篇博客中,我将演示如何根据不同的需求在python中生成样本随机数。使用随机和 Numpy。
import random
import numpy as np
内容
- 场景1:获取随机整数
- 场景2:获取带小数的随机数
- 场景3:获取具有已知统计数据/分布的随机数
- 场景4:使用现有的数字列表
场景一:获取随机整数
如果您只需要 0 到 10 之间的随机整数:
random.randint(0, 10)
# 7
如果您需要 0 到 10 之间的随机整数列表(例如 15):
np.random.randint(0, 10, 15)
# array([4, 4, 3, 0, 0, 1, 6, 9, 5, 3, 1, 6, 8, 5, 9])
如果你想得到一个非常随机和超大的整数,你可以这样做:
import time
int(time.time())
# 1669855560
场景二:获取带小数的随机数
获取 0 到 1 之间的随机数:
random.random()
# 0.4353251333114442
获取 0 到 10 之间的随机数:
random.uniform(0, 10)
# 9.210714292877288
如果您需要 0 到 10 之间的随机数列表(例如 5):
np.random.uniform(0, 10, 5)
# array([8.70816807, 5.13392407, 0.4998664 , 5.97627955, 2.15261284])
场景三:获取具有已知统计数据/分布的随机数
如果您已经知道所需样本的均值、众数和最大值,您可能想尝试三角函数。它有一个很酷的参数,称为模式:分布峰值出现的值。该值必须满足条件 left <= mode <= right
。如果我们将它设置为 5,样本将更有可能出现在 5 左右。
np.random.triangular(0, 5, 10, 5) # left, mode, right, sample
# [3.7525956 5.16902974 3.79206193 8.46765312 6.23403873]
如果您想从二项分布中抽取样本,您可以尝试一个名为binomial的函数。如果我们设置 n = 20,p = 0.25,大小为 2000:
sample = np.random.binomial(20, 0.25, 2000)
import matplotlib.pyplot as plt
plt.hist(sample)
当您想从给定的均值 (50) 和标准差 (3) 生成随机数时:
random.normalvariate(50,3)
# 49.25030663269399
当您想创建一个随机数列表(例如 5)时,给定一个已知的均值 (50) 和一个标准差 (3):
[random.normalvariate(50,3) for _ in range(5)]
# [49.873333367806644, 45.72729827453879, 47.69029669578644,
# 48.25661520735196, 47.26944802688148]
np.random.normal(50, 3, 5)
# array([47.18605431, 48.9894249 , 49.50258396, 49.85496526, 48.1503549 ])
当您想生成总和为某个值 (1) 的随机数列表(例如 10)时,您将需要名为dirichlet的函数。
sample = np.random.dirichlet(np.ones(10), size=1)
print(sample)
print(np.sum(sample))
# [[0.23988202 0.08378129 0.19439318 0.04282444 0.01568082 0.04033996
# 0.07864523 0.10856321 0.18118435 0.0147055 ]]
# 1.0000000000000002
场景四:使用现有的数字列表
假设我们有一个数字列表,如下所示:
sample = np.random.randint(0, 10, 20)
sample
# array([0, 3, 1, 1, 0, 2, 5, 1, 0, 7, 3, 6, 6, 9, 3, 7, 0, 5, 6, 6])
如果你想随机洗牌样本:
np.random.shuffle(sample)
sample
# array([1, 3, 7, 5, 3, 0, 6, 0, 0, 1, 3, 2, 9, 6, 6, 7, 6, 1, 5, 0])
如果要从样本中随机获取 5 个元素:
for _ in range ( 5 ):
print (np.random.choice(sample))
# 1
# 7
# 6
# 9
# 0
如果你想随机排列一个序列或返回一个排列的范围,下面是你可以做什么的几个例子:
np.random.permutation( 10 )
# array([2, 5, 0, 3, 1, 7, 8, 4, 6, 9])
np.random.permutation(sample)
# array([2, 0, 3 , 9, 6, 0, 3, 6, 5, 5, 6, 0, 7, 6, 0, 1, 1, 1, 7, 3])
arr = np.arange( 9 ).reshape(( 3 , 3 ))
np.random.permutation(arr)
# array([[3, 4, 5],
# [6, 7, 8],
# [0, 1, 2]])
结论
这篇简短的博客总结了许多在 python 中生成随机数的流行技术。了解这些技巧应该可以帮助您根据需要生成虚拟数据。