在分析代码时,我偶然发现了以下代码段:
msk = np.random.rand(len(df)) < 0.8
变量“msk”和“df”与我的问题无关。在做了一些研究之后,我认为这种用法也与“random”类有关。它在随机元素上给出True的概率为80%,False的概率为20%。这是为了屏蔽。我理解为什么使用它,但我不明白它是如何工作的。random方法不是应该给出浮点数吗?当我们把方法放在区间中时,为什么会有布尔语句?
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.rand(len(df))
np.random.rand(len(df)) < 0.8
numpy.random.choice
np.random.choice([True, False], p=[0.8, 0.2], size=len(df))
如果你的目标是子集化一个 Dataframe ,一个更好的方法是用途:
df.sample(frac=0.8)
df1 = df.sample(frac=0.8) df2 = df.drop(df1.index)
1条答案
按热度按时间eivgtgni1#
np.random.rand(len(df))
返回0到1之间的均匀随机数数组,np.random.rand(len(df)) < 0.8
将根据条件将其转换为布尔数组。由于有80%的可能性低于0.8,因此有80%的True值。
更明确的方法是使用
numpy.random.choice
:如果你的目标是子集化一个 Dataframe ,一个更好的方法是用途:
如何拆分dataframe 0.8/0.2: