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)
在分析代码时,我偶然发现了以下片段:
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)