You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NumPy进行数字分箱遇异常:目标区间0.1-1.0却得到1-10结果

问题分析

你当前的代码问题在于:lables_train是0-9的整数,远大于分箱边界[0.1,0.2,...,0.9],除了0会被分到第0组,1-9都会被分到第9组(因为np.digitize默认right=False,大于最后一个边界值的元素会返回边界数组的长度)。你说结果是1-10,大概率是后续对结果做了+1操作,但无论如何,这都不符合你按[0.1,0.2,...,1.0]分箱的预期——本质是你没有将原始的0-9数据归一化到0-1区间,导致数据和分箱边界不匹配。

解决方案

要实现将0-9的数组按[0.1,0.2,...,1.0]的逻辑分箱,需要先将数据归一化到0-1区间,再设置正确的分箱边界:

  1. 归一化原始数据:把0-9的整数映射到0-1范围
  2. 设置分箱边界:用0.1,0.2,...,0.9作为边界,这样会生成10个分箱区间,正好对应你要的0.1到1.0的划分

示例代码:

import numpy as np

# 假设你的原始数据
lables_train = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 步骤1:归一化到0-1区间
normalized_labels = lables_train / 9.0  # 0→0,9→1

# 步骤2:设置分箱边界
bins = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

# 执行分箱
digitalized_labels = np.digitize(normalized_labels, bins)

# 查看结果
print(digitalized_labels)
# 输出:[0 1 2 3 4 5 6 7 8 9]

如果希望分箱结果从1开始(而非0),可以直接加1:

digitalized_labels = np.digitize(normalized_labels, bins) + 1
# 输出:[1 2 3 4 5 6 7 8 9 10]
补充说明

np.digitize的核心规则(默认right=False):

  • 对于每个元素x,返回第一个满足bins[i] > x的索引i
  • 若x ≤ bins[0],返回0;若x > bins[-1],返回len(bins)
  • 如果你需要左闭右开的区间(比如[0.1,0.2)),可以设置right=True,此时规则变为返回第一个满足bins[i] ≥ x的索引i

内容的提问来源于stack exchange,提问作者Tim Bretschneider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:45:05