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

为何Min-Max归一化在Python中处理dtype='<i2'数据时结果异常?

问题原因

你用的<i2是16位有符号整数(int16),它的取值范围是[-32768, 32767]。当计算np.amax(array) - np.amin(array)时,如果数组的最大值和最小值跨度超过int16的存储上限(比如最大值接近32767、最小值接近-32768),两者的差值会达到65535,远大于int16能容纳的最大值32767,直接触发整数溢出,导致计算结果失真,同时抛出overflow encountered in scalar subtract警告。后续的归一化计算基于错误的差值,自然会得到[-130,130]这种完全不符合预期的范围。

解决办法

修改归一化函数,在计算前先把数组转换成浮点类型(比如float32或float64),从根源避免整数溢出问题:

import numpy as np

def MinMaxNormalize(array):
    # 转换为浮点类型再进行计算
    arr_float = array.astype(np.float32)
    min_val = np.amin(arr_float)
    max_val = np.amax(arr_float)
    # 处理所有值相同的极端情况,避免除以0报错
    if max_val == min_val:
        return np.zeros_like(arr_float)
    return (arr_float - min_val) / (max_val - min_val)
额外优化提示

加载raw数据后,也可以直接转换成浮点类型再处理,减少中间步骤的类型隐患:

imarray = raw_data.reshape((height, width)).astype(np.float32)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:48:18