python 不连续的列表随机抽取元素 np.random.choice()

1
2
3
4
numpy.random.choice(a, size=None, replace=True, p=None)
#从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组
#replace:True表示可以取相同数字,False表示不可以取相同数字
#数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。

方法一

1
2
3
import numpy as np
b = list(range(1,30))+list(range(70,95))
np.random.choice(b,10)

方法二

1
2
3
4
5
6
7
8
a = list(range(1,100))
b = list(range(1,30))+list(range(70,95))
p = np.ones(len(a))
mask = np.zeros(len(a))
mask[np.array(b)]=1
p *=mask
p /=np.sum(p)
np.random.choice(a,10, p=p)

在github别人代码中选取了相对麻烦的方法二的原因,可能是要满足被抽取的元素必须是在列表a 和 b的交集中。