如何将0-1500.5范围内的浮点数按宽度10高效分箱映射?
映射规则说明
根据你给出的示例,可以明确映射逻辑为:
- 取值范围在
[k*10, (k+1)*10)的数值,统一映射为(k+1)*10(k为非负整数) - 如果需要保留刚好等于10的整数倍的数值原值(比如
100.0→100、0.0→0),可以加额外的边界判断
高效实现方案
因为你处理的是固定形状的浮点数组,优先使用numpy的向量化运算,无额外循环开销,时间复杂度为O(n),效率远高于普通Python循环。
1. Numpy实现(推荐,数组处理最优)
基础版(完全匹配你给出的所有示例)
import numpy as np # 你的输入数组,形状为(1000, 1) input_arr = np.array([1.1, 505.3, 0.1, 210.1, 100.0, 0.0]).reshape(-1, 1) # 核心映射逻辑 result = (input_arr // 10 + 1) * 10
运行结果完全匹配示例:[[ 10.] [510.] [ 10.] [220.] [110.] [ 10.]]
兼容10整倍数原值的版本
如果需要100.0映射为100、0.0映射为0,调整代码如下:
result = np.where(input_arr % 10 == 0, input_arr, (input_arr // 10 + 1) * 10)
运行结果:[[ 10.] [510.] [ 10.] [220.] [100.] [ 0.]]
2. 纯Python实现(无第三方依赖场景)
如果不需要处理大规模数组、不想引入numpy,可以用列表推导式实现:
# 输入列表,形状(1000,1) input_list = [[1.1], [505.3], [0.1], [210.1], [100.0], [0.0]] # 基础版 result = [[(x[0] // 10 + 1) * 10] for x in input_list] # 兼容10整倍数原值的版本 result = [[x[0] if x[0] % 10 == 0 else (x[0] //10 +1)*10] for x in input_list]
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

