将仅包含正数据的列表规范化为包含负值和正值的范围

问题描述 投票:0回答:2

我有一个只包含正值的数据列表,例如下面的列表:

data_list = [3.34, 2.16, 8.64, 4.41, 5.0]

有没有办法将这个列表规范化到从 -1 到 +1 的范围内?

2.16
应该对应于归一化范围内的
-1
,值
8.64
应该对应于
+1
.

我发现有几个主题处理如何规范化包含负值和正值的列表的问题。但是,如何将仅包含正值或仅包含负值的列表归一化为一个从负值到正值范围的新归一化列表?

python normalization normalize
2个回答
1
投票

有了,你可以使用

interp

#pip install numpy
import numpy as np

data_list = [0.54, 2.16, 8.35, 0.35, 1.1]

out = np.interp(x=data_list, xp=(min(data_list), max(data_list)), fp=(-1, +1)).tolist()

输出:

print(out)

# [-0.9525, -0.5475, 1.0, -1.0, -0.8125]

0
投票

你不需要为这样的任务导入库。归一化数学非常简单。

要在 0 和 1 之间归一化,取每个值,减去列表的最小值,然后除以最大值减去最小值。

def normalise(data):
    data_max=max(data)
    data_min=min(data
    for i,n in enumerate(data):
        data[i]=(n-data_min)/(data_max-data_min)
    return(data)

然后要更改它缩放到的范围,您需要将它乘以范围的跨度(即

abs(max_value-min_value)
),然后加上下限。

def normalise_to_range(data,min_value,max_value):
    data_max=max(data)
    data_min=min(data)
    span=abs(max_value-min_value)
    for i,n in enumerate(data):
        data[i]=span*(n-data_min)/(data_max-data_min)+min_value
    return(data)

使用您的数据并将范围设置为 -1,1:

data_list = [0.54, 2.16, 8.35, 0.35, 1.1]
normalise_to_range(data_list,-1,1)

#[-0.9525, -0.5475, 1.0, -1.0, -0.8125]
© www.soinside.com 2019 - 2024. All rights reserved.