将浮点数组规范化到一定范围内,并在 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 中保持符号的主要内容,如果未能解决你的问题,请参考以下文章

Python在一定范围内替换数组中的元素

如何在一定范围内创建随机数组

浮点舍入误差会将报告结果移动到范围内

如果给定的数据在使用 R 或 Python 的范围(-1 到 1)内,如何以 (-3 ,-2,-1,0,1,2,3) 格式规范化数据?

Java如何生成一定范围内的随机数? [复制]

生成范围之间的随机浮点数组