通过numpy中的逻辑索引分配
Assignment by logical indexing in numpy
我有一个大小为 (1000,)
的实数值 numpy
数组。所有值都介于 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 范围内的值,而且转换先前分配给 classes 1 和 2。
您可以颠倒分配顺序,从 class 3.
开始
你可以在最后的 class 上设置一个上限,尽管你仍然有一个边界问题 1.00 vs class 1.
也许最好的办法是利用你的部门的规律性,例如:
Y = int(4*Y) # but you still have boundary problems.
我有一个大小为 (1000,)
的实数值 numpy
数组。所有值都介于 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 范围内的值,而且转换先前分配给 classes 1 和 2。
您可以颠倒分配顺序,从 class 3.
开始你可以在最后的 class 上设置一个上限,尽管你仍然有一个边界问题 1.00 vs class 1.
也许最好的办法是利用你的部门的规律性,例如:
Y = int(4*Y) # but you still have boundary problems.