首页 > 解决方案 > 将 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]

标签: mathscalelogarithm

解决方案


我看不出你的公式不应该使用负数的原因。这是一个简单的仿射函数。

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]

推荐阅读