首页 > 解决方案 > 如何按重量缩放列表?

问题描述

假设我有

values = [0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50]

并且我想按weight缩放每个元素,因此值越远离平均值越小(或越大)。也就是说,要使“小数”(低于平均值的数字)更大,而“大数字”(高于平均值的数字)更小。

假设平均值为 1,那么:

scale(values) -> [0.6, 0.7, 0.8, 1, 1.5, 4, 8, 12, 20]

高于平均值的值越远下降得越快(2 到 1.5,但 50 到 20),而低于平均值的值会增加得越快(0.5 到 0.8,但 0.1 到 0.6)。

我尝试搜索«如何规范化数据»,但这样的答案平等地缩放所有值。例如

scaled = [(i - min(values))/max(values) for i in values]

另外,我需要控制缩放值的权重。

标签: pythonstatistics

解决方案


也许,您正在寻找最小-最大缩放,这可以让您指定任意的下限和上限。

使用 numpy,实现很简单:

import numpy as np

arr = np.array([0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50])
l, h = .6, 80

(arr - arr.min()) / (arr.max() - arr.min()) * (h - l) + l

array([ 0.6       ,  0.75911824,  1.23647295,  2.03206413,  3.62324649,
        8.39679359, 16.35270541, 32.26452906, 80.        ])

使用python,过程类似;计算均值和标准差,并按元素执行此过程。


推荐阅读