np.random.rand生成值与0.8比较得到布尔掩码的运行原理是什么
代码运行逻辑拆解
这行代码可以拆成两个独立步骤理解:
- 第一步:运行
np.random.rand(len(df))
这是NumPy提供的随机数生成方法,会返回一个长度和len(df)相等的一维浮点数组,数组内每个元素都是独立从[0, 1)均匀分布中采样得到的随机值,所有值的取值范围都在0(包含)到1(不包含)之间。 - 第二步:执行
< 0.8的比较操作
NumPy原生支持向量化运算,不需要手动写循环遍历,会自动把数组里的每一个元素分别和0.8做大小比较:- 若元素值小于0.8,对应位置返回布尔值
True - 若元素值大于等于0.8,对应位置返回布尔值
False
- 若元素值小于0.8,对应位置返回布尔值
疑问点说明
你会有困惑大概率是把普通Python的随机方法和NumPy的行为搞混了:
普通Python的random.random()确实只返回单个浮点数,单个浮点数和0.8比较只会得到单个布尔值;但这里调用的是NumPy的随机方法,返回的是一整个浮点数组,配合NumPy的向量化比较规则,最终输出的就是和输入数组形状完全一致的布尔数组,也就是你说的掩码。
又因为每个随机值在[0,1)区间是均匀分布的,所以单个元素小于0.8的概率刚好是80%,大于等于0.8的概率是20%,刚好符合数据集拆分等场景的掩码需求。
内容的提问来源于stack exchange,提问作者Kiddbora
相关产品推荐
相关产品推荐

