numpy np.random.rand()或random.random()

ej83mcc0  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(246)

在分析代码时,我偶然发现了以下代码段:

msk = np.random.rand(len(df)) < 0.8

变量“msk”和“df”与我的问题无关。在做了一些研究之后,我认为这种用法也与“random”类有关。它在随机元素上给出True的概率为80%,False的概率为20%。这是为了屏蔽。我理解为什么使用它,但我不明白它是如何工作的。random方法不是应该给出浮点数吗?当我们把方法放在区间中时,为什么会有布尔语句?

eivgtgni

eivgtgni1#

np.random.rand(len(df))返回0到1之间的均匀随机数数组,np.random.rand(len(df)) < 0.8将根据条件将其转换为布尔数组。
由于有80%的可能性低于0.8,因此有80%的True值。
更明确的方法是使用numpy.random.choice

np.random.choice([True, False], p=[0.8, 0.2], size=len(df))

如果你的目标是子集化一个 Dataframe ,一个更好的方法是用途:

df.sample(frac=0.8)
如何拆分dataframe 0.8/0.2:
df1 = df.sample(frac=0.8)
df2 = df.drop(df1.index)

相关问题