深入了解 NumPy 的 numpy.random.choice
函数
在数据科学、统计学和机器学习等领域中,随机数生成是一个非常重要的任务。而 NumPy 提供了许多强大的工具来生成随机数,其中一个非常有用的函数就是 numpy.random.choice
。本文将详细介绍这个函数的用法及其参数。
函数简介
numpy.random.choice
函数用于从给定的 1 维数组中生成一个随机样本,它提供了一种灵活且高效的方式来进行随机采样。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/16290.html
函数签名
css
numpy.random.choice(a, size=None, replace=True, p=None)
参数详解
- a: 1-D array-like or int
如果是 ndarray,则从其元素中生成随机样本。如果是 int,则随机样本将从 np.arange(a) 中生成。 - size: int or tuple of ints, optional
输出样本的形状。如果给定形状,例如 (m, n, k),则会抽取 m * n * k 个样本。默认值为 None,此时返回单个值。 - replace: boolean, optional
样本是否有放回地抽取。默认值为 True,意味着可以多次选择同一值。 - p: 1-D array-like, optional
与 a 中每个条目相关联的概率。如果未给定,则样本假设在 a 的所有条目上均匀分布。
返回值
- samples: single item or ndarray
生成的随机样本。
异常
- ValueError:
如果 a 是 int 并且小于零,如果 a 或 p 不是 1 维的,如果 a 是大小为 0 的 array-like,如果 p 不是概率向量,如果 a 和 p 长度不同,或者如果 replace=False 并且样本大小大于总体大小,则会抛出此异常。
注意事项
- 在新代码中应使用
random.Generator.choice
方法。 - 用户指定概率(通过 p 参数)使用的采样器更为通用但效率较低。
- 通过轴关键字,
Generator.choice
方法可以从二维数组中随机抽取行,这在numpy.random.choice
中是不可能的。
使用示例
下面是一些使用 numpy.random.choice
的示例,以帮助您理解如何应用这个函数:文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/16290.html
示例 1:生成一个从 np.arange(5)
中的大小为 3 的均匀随机样本
python
import numpy as np
np.random.choice(5, 3)
# 输出示例: array([0, 3, 4])
这等价于 np.random.randint(0, 5, 3)
。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/16290.html
示例 2:生成一个从 np.arange(5)
中的大小为 3 的非均匀随机样本
css
np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
# 输出示例: array([3, 3, 0])
示例 3:生成一个从 np.arange(5)
中的大小为 3 的无放回均匀随机样本
ini
np.random.choice(5, 3, replace=False)
# 输出示例: array([3, 1, 0])
这等价于 np.random.permutation(np.arange(5))[:3]
。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/16290.html
示例 4:生成一个从 np.arange(5)
中的大小为 3 的无放回非均匀随机样本
ini
np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
# 输出示例: array([2, 3, 0])
示例 5:从任意 array-like 对象中生成样本
css
aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
# 输出示例: array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'], dtype='<U11')
总结
numpy.random.choice
是一个非常强大的工具,它允许从数组中灵活地抽取随机样本。无论是均匀分布还是非均匀分布,有放回还是无放回,该函数都可以很好地处理。尽管如此,在新代码中建议使用 random.Generator.choice
方法,以获得更高的性能和更多的功能。文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/16290.html
文章源自灵鲨社区-https://www.0s52.com/bcjc/pythonjc/16290.html
评论