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

如何用MinMaxScaler归一化4D输入数组?

解决4D数组用MinMaxScaler归一化的问题

你的4D数组形状为(3,1,5,4),包含3个样本,每个样本对应4个特征(每列一个特征)。要适配MinMaxScaler的2D输入要求,只需通过形状转换、归一化、形状恢复三步实现:

步骤1:调整数组形状为2D格式

首先去掉数组中维度为1的冗余轴,再将样本维度和样本内的行维度合并,得到(n_samples_total, n_features)格式的2D数组:

import numpy as np
from sklearn.preprocessing import MinMaxScaler

A = np.array([
            [[[0, 1, 2, 3],
              [3, 0, 1, 2],
              [2, 3, 0, 1],
              [1, 3, 2, 1],
              [1, 2, 3, 0]]],
            
            [[[9, 8, 7, 6],
              [5, 4, 3, 2],
              [0, 9, 8, 3],
              [1, 9, 2, 3],
              [1, 0, -1, 2]]],
            
            [[[0, 7, 1, 2],
              [1, 2, 1, 0],
              [0, 2, 0, 7],
              [-1, 3, 0, 1],
              [1, 0, 1, 0]]]
              ])

# 去掉维度为1的轴,形状变为(3,5,4)
squeezed_A = np.squeeze(A, axis=1)
# 合并前两个维度,得到(3*5,4)=(15,4)的2D数组
reshaped_A = squeezed_A.reshape(-1, 4)

步骤2:用MinMaxScaler归一化

直接对2D数组执行拟合和转换操作,MinMaxScaler会自动按列(即每个特征)进行归一化:

scaler = MinMaxScaler()
scaled_reshaped = scaler.fit_transform(reshaped_A)

步骤3:恢复数组为原4D形状

将归一化后的2D数组重新转换回原始的4D结构:

# 先恢复为(3,5,4)
scaled_squeezed = scaled_reshaped.reshape(3, 5, 4)
# 添加维度为1的轴,回到(3,1,5,4)
scaled_A = np.expand_dims(scaled_squeezed, axis=1)

# 验证形状是否匹配
print(scaled_A.shape)  # 输出(3,1,5,4)

关键说明

  • 上述方法是全局归一化:用所有样本中每个特征的全局最小值和最大值来缩放,符合机器学习中归一化的常规做法(确保训练数据的统计量一致)。
  • 如果需要对每个样本单独归一化(仅用当前样本的特征范围),可以修改逻辑为遍历每个样本单独处理,但这种场景在机器学习中较少见。

内容的提问来源于stack exchange,提问作者Amina Umar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:25:33