Python Numpy random.choice() 数据分布

在随机数生成中,NumPy 的 random.choice() 方法非常常用。它不仅可以从给定数据中随机抽取值,还可以按照指定的 概率分布 来生成随机结果。本文主要介绍 Python NumPy random.choice() 与数据分布 的基本用法。

1、什么是数据分布(Data Distribution)?

数据分布 指的是:

一组数据中,所有可能取值以及每个取值出现频率或概率的描述方式。

在统计学、数据分析和机器学习中,数据分布非常重要,因为它可以帮助我们理解:

  • 哪些值更容易出现
  • 哪些值较少出现
  • 数据整体是否均衡
  • 样本是否符合预期规律

例如,一组数据只可能取值 3、5、7、9,它们出现的概率分别是:

  • 3 → 0.1
  • 5 → 0.3
  • 7 → 0.6
  • 9 → 0.0

那么这组数据就服从一个离散概率分布。


2、什么是随机分布?

随机分布 是指:

随机生成的数据并不是“完全平均”出现,而是按照某种概率规则出现。

例如:

  • 有些值出现概率高
  • 有些值出现概率低
  • 有些值甚至永远不会出现

对于离散数据,通常使用 概率分布 来描述每个值出现的可能性。
NumPy 可以通过 random.choice() 方法,根据给定概率生成符合分布要求的随机数。


3、使用 random.choice() 按概率生成随机数

choice() 方法可以从一个给定数组中随机选取元素。

基本语法

random.choice(a, size=None, replace=True, p=None)

参数说明:

  • a:待选值的数组或列表
  • size:返回结果的形状
  • replace:是否允许重复抽样,默认 True
  • p:每个元素对应的概率

4、使用 p 参数指定概率分布

通过 p 参数,可以指定每个值被选中的概率。

示例:生成符合指定分布的一维数组

from numpy import random 

x=random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=100) 

print(x)

这段代码表示:

  • 生成一个长度为 100 的一维数组
  • 数组元素只能是 3、5、7、9
  • 各值出现的概率分别为:
    • 3 → 10%
    • 5 → 30%
    • 7 → 60%
    • 9 → 0%

5、概率之和必须等于 1

p 参数中,所有概率值之和必须等于 1

例如:

p=[0.1, 0.3, 0.6, 0.0]

其总和为:

0.1+0.3+0.6+0.0=1.0

如果概率和不等于 1,NumPy 会报错。


6、概率为 0 的值不会出现

在上面的例子中,9 的概率被设置为 0.0,因此它不会被选中。

from numpy import random

x=random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=100)

print(x)

理论上,无论运行多少次,结果中都不会出现 9


7、抽样结果不一定完全等于理论比例

需要注意的是:

概率描述的是“长期趋势”,并不保证每次抽样结果都严格按比例分布。

例如:

  • 理论上 3 的概率是 10%
  • 如果只生成 10 个数,可能一个 3 都没有
  • 如果生成 10 万个数,结果会更接近 10%

也就是说:

  • 样本越小,波动越大
  • 样本越大,越接近理论概率

8、生成二维数组

通过 size 参数,还可以生成任意形状的数组。

示例:生成二维数组

from numpy import random

x=random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=(3, 5))

print(x)

说明:

  • 返回一个 3 × 5 的二维数组
  • 每个元素仍然来自 [3, 5, 7, 9]
  • 并且遵循给定概率分布

9、replace 参数补充说明

choice() 默认参数:

replace=True

表示:

允许重复抽取同一个值

这也是最常见的情况,特别适合模拟“按分布随机生成数据”。

示例:

from numpy import random

x=random.choice([1, 2, 3], size=10, replace=True)
print(x)


如果设置:

replace=False

则表示不允许重复抽样。

⚠️ 这时抽样数量不能超过原数组长度,否则会报错。


10、完整示例

from numpy import random

# 按指定概率生成 20 个随机数
x=random.choice(
    [3, 5, 7, 9],
p=[0.1, 0.3, 0.6, 0.0],
size=20
)

print(x)

推荐阅读
cjavapy编程之路首页