发布于2026-07-02 阅读(0)
扫一扫,手机访问
说实话,数组归一化这件事,听起来简单,但真正落地的时候,很多人的代码写得不够“稳”。高效的关键,不在于代码有多短,而在于逻辑是否清晰、能否复用、能不能防错,以及最重要的是——是否适配你手头数据的实际分布。最常用的其实就是两种:最小-最大归一化(min-max)和Z-Score标准化。下面直接讲清楚它们的应用场景和代码实现。

这个场景很常见,比如图像像素处理、神经网络输入层,特征尺度差异大但几乎没有异常值,并且数值范围需要严格限定。核心原理就是线性缩放:
示例代码:
import numpy as np
def min_max_normalize(arr):
arr = np.asarray(arr)
amin, amax = arr.min(), arr.max()
if amin == amax:
return np.full_like(arr, 0.0)
return (arr - amin) / (amax - amin)
# 一维或二维都支持
data = np.array([[10, 20, 30], [40, 50, 60]])
result = min_max_normalize(data) # 按整个数组全局归一化
# 若需按列归一化:min_max_normalize(data.T).T
如果你的数据里明显有离群值,或者数据近似正态分布(比如用户行为时长、收入),用Z-Score会更合适。它对异常值不那么敏感:
np.std 默认就是 ddof=0,符合大多数统计场景;如果非得用样本标准差,再加 ddof=1。示例代码:
def z_score_normalize(arr):
arr = np.asarray(arr)
mu, sigma = np.mean(arr), np.std(arr, ddof=0)
if sigma == 0:
return np.zeros_like(arr)
return (arr - mu) / sigma
有时候,你并不需要严格的[0,1]区间,而是想映射到[-1,1]或者[1,100]这样的自定义范围。这其实很简单:
(arr - amin) / (amax - amin) * 2 - 1(arr - amin) / (amax - amin) * (b - a) + a真正影响效率和效果的,往往不是花哨的技巧,而是那些容易被忽略的基础问题:
MinMaxScaler 或 StandardScaler,它们内置了fit/transform/partial_fit,支持pipeline,还能保证跨批次的一致性。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8