如何将Numpy数组归一化至1到10的数值范围?
将NumPy数组归一化到1-10范围的最简/最快方法
你手里的这个NumPy数组:
import numpy as np arr = np.array([10, 30, 16, 18, 24, 18, 30, 30, 21, 7, 15, 14, 24, 27, 14, 16, 30, 12, 18])
要归一化到1-10的范围其实很简单,只需要把通用归一化公式调整成目标区间的版本就行。
核心公式推导
通用的归一化到任意区间[target_min, target_max]的公式是:
归一化后的值 = ((原数组 - 原数组最小值) / (原数组最大值 - 原数组最小值)) * (target_max - target_min) + target_min
针对你的需求,target_min=1,target_max=10,代入后就得到适配1-10范围的计算式。
方法一:手动计算(最简最快,无需额外库)
这是最直接的方式,不需要导入其他工具包,几行代码就能搞定:
# 先获取原数组的最值 min_val = arr.min() max_val = arr.max() # 应用公式完成归一化 normalized_arr = ((arr - min_val) / (max_val - min_val)) * 9 + 1
这样处理后,原数组里的最小值7会被映射到1,最大值30会被映射到10,所有中间值都会按比例缩放到1-10之间。
方法二:用sklearn的MinMaxScaler(适合机器学习流水线)
如果你的场景是在机器学习工作流里,用sklearn的工具会更规范:
from sklearn.preprocessing import MinMaxScaler # 初始化缩放器,指定目标范围 scaler = MinMaxScaler(feature_range=(1, 10)) # 注意:MinMaxScaler要求输入是二维数组,所以先reshape再转换,最后转回一维 normalized_arr = scaler.fit_transform(arr.reshape(-1, 1)).flatten()
两种方法都能得到你想要的结果,手动计算的方式在速度和简洁性上更胜一筹,适合快速处理单个数组;sklearn的方式则更适合批量处理或者整合到复杂的数据分析流程中。
内容的提问来源于stack exchange,提问作者Aventinus
相关产品推荐
相关产品推荐

