将浮点数组规范化到一定范围内,并在 Python 中保持符号
Posted
技术标签:
【中文标题】将浮点数组规范化到一定范围内,并在 Python 中保持符号【英文标题】:Normalize an array of floats into a certain range with keeping sign in Python 【发布时间】:2021-11-19 23:30:06 【问题描述】:我有一组浮点数,可以是负数也可以是正数:
[-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21]
我需要将此数组规范化为这样的范围 [-5,5]。 重点是,我需要保留他们的符号(如果它是正的,则应该映射为正,反之亦然)
【问题讨论】:
好吧,那么你必须定义normalize
。底层转换通常是线性的,所以当然,如果你的最大值和最小值之和不为零,一些数字的符号就会改变。
【参考方案1】:
假设以下 numpy 数组:
import numpy as np
a = np.array([-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21])
您希望数据跨越 [-5, 5] 并保持其符号,因此以零为中心。这意味着数据的绝对最大值将是(其原始符号的)边界之一。因此,一个简单的转换是使用这个绝对最大值进行缩放
scaled_a = a/abs(a).max()*5
输出:
array([-5. , -2.70212766, -4.38297872, -2.40425532, -1.95744681,
-0.95744681, 0.42553191, 1.70212766, 2.34042553, 3.19148936,
3.61702128, 4.46808511])
【讨论】:
以上是关于将浮点数组规范化到一定范围内,并在 Python 中保持符号的主要内容,如果未能解决你的问题,请参考以下文章
如果给定的数据在使用 R 或 Python 的范围(-1 到 1)内,如何以 (-3 ,-2,-1,0,1,2,3) 格式规范化数据?