python - 通过numpy中的逻辑索引分配
问题描述
我有一个numpy
size 的实值数组(1000,)
。所有值都介于 0 和 1 之间,我想将其转换为分类数组。所有小于 0.25 的值都应分配给类别 0,介于 0.25 和 0.5 之间的值分配给类别 1,介于 0.5 到 0.75 之间的值分配给类别 2,以及 0.75 到 1 分配给类别 3。逻辑索引似乎不起作用:
Y[Y < 0.25] = 0
Y[np.logical_and(Y >= 0.25, Y < 0.5)] = 1
Y[np.logical_and(Y >= 0.5, Y < 0.75)] = 2
Y[Y >= 0.75] = 3
结果:
for i in range(4):
print(f"Y == {i}: {sum(Y == i)}")
Y == 0: 206
Y == 1: 0
Y == 2: 0
Y == 3: 794
相反需要做什么?
解决方案
错误在您的转换逻辑中,而不是在您的索引中。最后声明:
Y[Y >= 0.75] = 3
不仅将 0.75 - 1.00 范围内的值转换,而且将先前的分配转换为类 1 和 2。
你可以颠倒分配顺序,从第 3 课开始。
您可以对最终类设置上限,尽管 1.00 与 1 类仍然存在边界问题。
也许最好的办法是利用您的部门的规律性,例如:
Y = int(4*Y) # but you still have boundary problems.
推荐阅读
- winforms - WinForms 使用 Autofac 注册来自不同项目的 AssemblyTypes 不起作用
- google-sheets - 有没有办法从谷歌表格中的多个股票列表中获取与零股票相对应的日期?
- amazon-web-services - Packer 无法从 AWS Codebuild 检索 ec2 密码。构建超时完成
- flutter - 使用 Internet 连接检查器时,如何将检查 Internet 连接的时间间隔从 10 秒更改为 5 秒左右
- python - 代码OSS不执行Jupyter notebook
- django - django set_cookie 没有在浏览器中设置 cookie
- flutter - 音频播放器控制错误 - Flutter
- android - Cordova 构建 android 失败:需要为 `android:exported` 指定显式值
- php - 目标类 [ImportTransaksiR13_Controller] 不存在
- python-3.x - 如何将一些索引值设置为 nan 或 empty?