python - 如何按重量缩放列表?
问题描述
假设我有
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]
另外,我需要控制缩放值的权重。
解决方案
也许,您正在寻找最小-最大缩放,这可以让您指定任意的下限和上限。
使用 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,过程类似;计算均值和标准差,并按元素执行此过程。
推荐阅读
- node.js - 使用 sinon 存根嵌套方法调用
- javascript - 我如何选择所有 lis,然后将其所有数字相加?
- java - 工件不存在时 Maven 的可选依赖项
- java - Spring Feign 配置:如何测试所有@Bean 方法被调用
- scala - DDD 函数式方式:为什么在函数式语言中应用 DDD 时最好将状态与行为解耦?
- codenameone - 如何计算文本大小?
- c# - 属性路由值到 ASP.NET CORE 中的模型/FromBody 参数
- r - 如何强制聚类算法匹配预期结果?
- python - OpenCV 错误:(-215:Assertion failed) !_src.empty() in function 'cvtColor'
- php - 使用 jQuery 在 WordPress 中拉出随机横幅图像