如何使用 NumPy 从列表中以不同的概率选择元素?

numpypythonserver side programmingprogramming

使用 numpy 库有多种方法可以从列表中以不同的概率选择元素。

在 python 中,NumPy 库提供了一个名为 random 的模块,该模块具有多个函数,例如 choice()、multinomial() 等,用于从具有不同概率的数组中选择元素。列表中定义的所有概率值的总和应等于 1。让我们逐一看看每种方法。

使用 random.choice() 函数

random 模块提供了函数 choice(),用于从给定的 1-d 数组中计算具有指定概率分布的随机样本。以下是使用 choice() 函数的语法。

numpy.random.choice(list,size = (rows,columns),p = probability_values)

其中,

  • numpy 是库。

  • random 是 numpy 中的模块。

  • choice 是获取具有定义概率的元素的函数

  • size  是具有定义行数和列数的数组大小。

  • list  是元素列表。

  • p是概率

示例

在下面的例子中,我们将不同的概率值和一个列表作为参数传递给 choice() 函数,并获取具有指定概率的元素。

import numpy as np
list = [10,12,4,5,98]
probabilities = [0.1, 0.2, 0.3, 0.2, 0.2]
arr = np.random.choice(list, size=8, p=probabilities)
print("使用定义的元素概率创建的数组:", arr)

输出

使用定义的元素概率创建的数组:[10 4 5 10 98 12 4 12]

示例

以下是另一个示例,它使用choice() ,numpy 库的函数。

import numpy as np
lst = [1,0,12,4,5,98,34]
probabilities = [0.1, 0.1, 0.2, 0.2, 0.2,0.1,0.1]
arr = np.random.choice(lst, size=8, p=probabilities)
print("使用定义的元素概率创建的数组:",arr)

输出

使用定义的元素概率创建的数组:[[ 0]
 [ 5]
 [ 5]
 [ 4]
 [12]
 [ 4]
 [34]]

使用 random.multinomial() 函数

random 模块中可用的另一个函数是 multinomial() 函数,该函数根据定义的试验次数和概率生成多项分布中的元素。

语法

以下是 multinomial() 函数的语法。

numpy.random.multinomial(n, pvals, size=None)

其中,

  • numpy 是库。

  • random 是 numpy 中的模块。

  • multinomial 是获取具有定义的多项分布元素的函数概率。

  • size 是具有定义行数和列数的数组大小。

  • n 是试验次数。

  • pvals 是概率。

示例

在下面的示例中,我们使用 multinomial() 函数创建一个 1-d 数组,方法是传递试验次数、概率列表和数组大小作为输入参数。然后,将使用定义的多项分布元素概率创建数组。

import numpy as np
probabilities = [0.1, 0.2, 0.3, 0.2, 0.2]
arr = np.random.multinomial(5, probabilities)
print("使用定义的元素概率创建的数组:",arr)

输出

使用定义的元素概率创建的数组:[0 1 1 3 0]

示例

以下是另一个示例,它根据定义的概率创建具有多项分布元素的二维数组。

import numpy as np
probabilities = [0.1, 0.2, 0.3, 0.2, 0.2]
arr = np.random.multinomial(5, probabilities,size = (2))
print("使用定义的元素概率创建的数组:",arr)

输出

使用定义的元素概率创建的数组:[[1 0 2 2 0]
[0 1 1 2 1]]

使用 random.default_rng().choice() 函数

此函数用于生成具有随机选择元素的数组,其中包含定义的概率列表。该函数仅在 Numpy 1.17 或更高版本中可用。

示例

以下是使用此函数生成一维数组的示例。

import numpy as np
rng = np.random.default_rng()
elements = [1, 2, 3, 4,10,3,4]
arr = rng.choice(elements, p=[0.1, 0.1, 0.2, 0.3,0.1,0.1,0.1],size = 10)
print("使用定义的元素概率创建的数组:",arr)

输出

以下是用于创建一维数组的 random.default_rng().choice() 的输出

使用定义的元素概率创建的数组:[3 3 4 4 1 4 4 3 4 4]

示例

让我们看另一个使用 random 模块的 random.default_rng().choice() 函数使用定义的概率创建二维数组的示例。

import numpy as np
rng = np.random.default_rng()
elements = [23,43,42,5,78,90]
arr = rng.choice(elements, p=[0.1, 0.2, 0.2, 0.3,0.1,0.1],size = (5,5))
print("使用定义的元素概率创建的数组元素:",arr)

输出

使用定义的元素概率创建的数组:[[ 5 78 78 90 43]
 [ 5 78  5 43 78]
 [42  5 42  5 90]
 [ 5 43  5 43 23]
 [78 42  5  5 78]]


相关文章