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

Kid*_*ora 5 python random numpy random-seed

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

msk = np.random.rand(len(df)) < 0.8
Run Code Online (Sandbox Code Playgroud)

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

moz*_*way 13

np.random.rand(len(df))返回 0 到 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))
Run Code Online (Sandbox Code Playgroud)

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

df.sample(frac=0.8)
Run Code Online (Sandbox Code Playgroud)

如何拆分数据帧 0.8/0.2:

df1 = df.sample(frac=0.8)
df2 = df.drop(df1.index)
Run Code Online (Sandbox Code Playgroud)