【问题标题】:np.random.rand() or random.random()np.random.rand() 或 random.random()
【发布时间】:2021-11-04 03:21:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: python numpy random random-seed


    【解决方案1】:

    np.random.rand(len(df)) 返回一个介于 0 和 1 之间的均匀随机数数组,np.random.rand(len(df)) &lt; 0.8 将根据条件将其转换为布尔数组。

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

    更明确的方法是使用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)
    

    【讨论】:

    • 感谢您的回答,但是通过使用 pd.df.sample 我只能得到我想要的部分,而且它完全是随机的,对吧?如果我想将剩余的 20% 未选中的分配给以后使用的变量,我该怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2019-05-25
    • 2010-12-30
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多