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

np.random.rand() or random.random()

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

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

变量“msk”和“df”与我的问题无关。在做了一些研究之后,我认为这种用法也与“随机”class 有关。对于随机元素,它给出 True 的概率为 80%,而 False 的概率为 20%。这样做是为了遮蔽。我明白为什么要使用它,但我不明白它是如何工作的。随机方法不应该给出浮点数吗?为什么我们把方法放在一个区间里会有boolean语句?

np.random.rand(len(df))returns0到1之间的均匀随机数数组,np.random.rand(len(df)) < 0.8会根据条件将其转化为布尔数组

因为有 80% 的机会低于 0.8,所以有 80% 的真实值。

更明确的方法是使用 numpy.random.choice:

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

如果您的目标是对数据框进行子集化,则更好的方法是使用:

df.sample(frac=0.8)

如何拆分数据帧 0.8/0.2:

df1 = df.sample(frac=0.8)
df2 = df.drop(df1.index)