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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:28:40