math - 将 log10-Data 转换为 1-11 比例
问题描述
我想将我的数据转换为 1-11 的比例。起初,我获取原始数据并使用以下公式转换它们,我从这里获取:
scale_min + float(x-data_min)*float(scale_max-scale_min)/(data_max-data_min)
但是,由于我的数据有极端异常值,这使得大多数数据的差异无法看到。我考虑过获取数据的 log10,然后将这些值转换为我的 1-11 比例,但是,上述公式不适用于负值,负值可能会出现 log10。有没有其他方法可以将 log10 值映射到 1-11 比例?或者以任何其他方式将具有极端异常值的数据映射到 1-11 的比例,从而可以感知较小值的差异,同时不会丢失任何信息?
我的价值观的一个例子是
[0.1, 10, 300, 500000]
解决方案
我看不出你的公式不应该使用负数的原因。这是一个简单的仿射函数。
python中的示例:
from math import log10
data = [0.1, 10, 300, 500000]
logdata = [log10(x) for x in data]
a = min(logdata)
b = max(logdata)
data1_11 = [1 + (y - a) * 10 / (b - a) for y in logdata]
print(data1_11)
# [1.0, 4.0, 6.2, 11.0]
推荐阅读
- angularjs - 将当前用户下的数据保存在datafirebase中
- generics - Golang Generic-ish Hashmap
- logging - 在使用合并语句 SQL Server 2008 R2 插入之前将受影响的行插入临时表
- gimp - Gimp 无法显示可见的某些图层?
- amazon-web-services - AWS Elastic Beanstalk - 部署简单节点 API
- python - 了解为什么 drop.duplicates() 不起作用
- regex - 用于多行字符串的 ASP.Net MVC 正则表达式
- java - 在构造函数中使用参数化类型从名称实例化类
- javascript - FourSquare Axios 请求 - ReactJs - 无法读取未定义的属性“地图”
- excel - Excel VBA 更改网站组合框