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

如何无循环对3D numpy数组按2D层执行MinMax归一化?

3D NumPy数组的2D层级别MinMax归一化(无循环实现)

问题描述

需要对以下3D NumPy数组,在2D层级别(即每个独立的2D子数组)执行MinMax归一化:

原始数组:

import numpy as np

arr = np.array([[[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]],
          [[0, 1, 2],
           [3, 4, 5],
           [6, 7, 10]],
          [[0, 1, 2],
           [3, 4, 5],
           [6, 7, 12]]])

期望归一化结果:

np.array([[[0. , 0.1, 0.2],
           [0.3, 0.4, 0.5],
           [0.6, 0.7, 1. ]],
          [[0. , 0.1, 0.2],
           [0.3, 0.4, 0.5],
           [0.6, 0.7, 1. ]],
          [[0.        , 0.08333333, 0.16666667],
           [0.25      , 0.33333333, 0.41666667],
           [0.5       , 0.58333333, 1.        ]]])

要求不使用循环实现。

解决方案

利用NumPy的广播机制和极值计算的axis参数,可以高效完成无循环的2D层级别归一化:

import numpy as np

# 定义原始数组
arr = np.array([[[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]],
          [[0, 1, 2],
           [3, 4, 5],
           [6, 7, 10]],
          [[0, 1, 2],
           [3, 4, 5],
           [6, 7, 12]]])

# 计算每个2D层的最小值和最大值,keepdims保持维度匹配
min_vals = arr.min(axis=(1, 2), keepdims=True)
max_vals = arr.max(axis=(1, 2), keepdims=True)

# 执行MinMax归一化公式
normalized_arr = (arr - min_vals) / (max_vals - min_vals)

# 输出结果
print(normalized_arr)

核心要点

  • axis=(1,2):指定对每个3D数组中的2D子数组(第1、2维度)单独计算极值,得到每个2D层对应的单个min/max值。
  • keepdims=True:保持结果的维度为(3,1,1),与原数组(3,3,3)兼容,触发广播机制自动扩展维度,实现逐元素运算。
  • 广播机制:无需手动循环,NumPy会自动将极值数组扩展为与原数组相同的形状,完成每个2D层内的归一化计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:40:38