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

Python如何将带正负的浮点数数组保留符号归一化到指定范围

带符号浮点数数组归一到[-5,5]区间的实现方法

核心需求

将包含正负值的浮点数数组映射到[-5,5]区间,且严格保留原始数值的正负符号,正数映射后仍为正,负数映射后仍为负。

可选实现方案

方案1:全局最大绝对值对称缩放(推荐,保留原始数值比例)

实现逻辑

  • 计算数组所有元素的最大绝对值max_abs,以此为基准做等比例对称缩放,天然保留原始符号
  • 单元素归一化公式:normalized_x = (x / max_abs) * 5
    • 原始值<0:结果落在[-5, 0)区间
    • 原始值>0:结果落在(0, 5]区间
    • 原始值=0:归一化后仍为0

Python代码示例

import numpy as np

# 示例输入数组
raw_arr = np.array([-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21])

# 计算最大绝对值,加极小常数避免全零数组的除零错误
max_abs = np.max(np.abs(raw_arr)) + 1e-8

# 执行归一化
normalized_arr = (raw_arr / max_abs) * 5

print(normalized_arr)

示例输出

[-5.         -2.70212766 -4.38297872 -2.40425532 -1.95744681 -0.95744681
  0.42553191  1.70212766  2.34042553  3.19148936  3.61702128  4.46808511]

方案2:正负分区间独立归一(正负区间均占满上下限)

实现逻辑

如果需要负数区间完全覆盖[-5,0]、正数区间完全覆盖[0,5],可以对正负值分别做归一:

  • 负数部分:将[最小负值, 0]映射到[-5, 0],公式:normalized_x = (x / min_negative) * (-5),min_negative为数组中最小的负数
  • 正数部分:将[0, 最大正值]映射到[0,5],公式:normalized_x = (x / max_positive) * 5,max_positive为数组中最大的正数

Python代码示例

import numpy as np

raw_arr = np.array([-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21])
normalized_arr = np.zeros_like(raw_arr)

# 处理负数
neg_mask = raw_arr < 0
if np.any(neg_mask):
    min_neg = np.min(raw_arr[neg_mask])
    normalized_arr[neg_mask] = (raw_arr[neg_mask] / min_neg) * (-5)

# 处理正数
pos_mask = raw_arr > 0
if np.any(pos_mask):
    max_pos = np.max(raw_arr[pos_mask])
    normalized_arr[pos_mask] = (raw_arr[pos_mask] / max_pos) * 5

print(normalized_arr)

示例输出

[-5.         -2.70212766 -4.38297872 -2.40425532 -1.95744681 -0.95744681
  0.47619048  1.9047619   2.61904762  3.57142857  4.04761905  5.        ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:18:05