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

如何基于MAX数组对形状为(n, L*w)的数组A进行归一化?

数组分块归一化的实现方法

你的问题核心是形状不匹配导致广播失败:A的形状是(n, L*w),MAX是(n, w),直接除法时numpy无法自动对齐分块后的维度。以下是两种可行的实现方式:

方法1:扩展MAX的形状至与A匹配

通过np.tile将MAX在列方向重复L次(L = A列数 / w),让两者形状完全一致后再做除法:

import numpy as np

def normalize(array, MAX):
    w = MAX.shape[1]
    L = array.shape[1] // w
    # 把MAX的列重复L次,形状变为(n, L*w)
    max_tiled = np.tile(MAX, (1, L))
    return array / max_tiled

方法2:重塑A的维度实现广播

将A重塑为(n, L, w),利用numpy的广播机制,让(n, 1, w)的MAX与(n, L, w)的A逐块对应除法,最后再重塑回原形状:

import numpy as np

def normalize(array, MAX):
    n, total_cols = array.shape
    w = MAX.shape[1]
    L = total_cols // w
    # 重塑维度后广播除法,再恢复原形状
    return (array.reshape(n, L, w) / MAX[:, None, :]).reshape(n, total_cols)

验证示例

用你提供的测试数据验证:

A = np.array([[9, 1, 9, 4, 4, 9],
              [8, 9, 8, 1, 1, 2]])
MAX = np.array([[2, 7, 3],
                [7, 3, 3]])

result = normalize(A, MAX)
print(result.tolist())

输出结果与预期一致:

[[4.5, 0.14285714285714285, 3.0, 2.0, 0.5714285714285714, 3.0],
 [1.1428571428571428, 3.0, 2.6666666666666665, 0.14285714285714285, 0.3333333333333333, 0.6666666666666666]]

原代码问题说明

直接array/MAX时,numpy的广播规则要求最后一个维度长度相同,但A的列数是L*w,MAX是w,不满足广播条件,因此无法得到正确的分块归一化结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:17:17