首页 > 解决方案 > 通过numpy中的逻辑索引分配

问题描述

我有一个numpysize 的实值数组(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

相反需要做什么?

标签: pythonnumpyvariable-assignment

解决方案


错误在您的转换逻辑中,而不是在您的索引中。最后声明:

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.

推荐阅读