如何在Python中将数据转换为10点范围缩放?

时间:2016-11-24 17:45:22

标签: python

植物中的疾病严重程度水平在0(无疾病)至10(严重疾病)的范围内。例如,大约12种植物的疾病水平如下:

(1.7,3.7,5.3,7.3,2.3,3.7,5.7,7.3,1,4,5.7,6.7)

使用另一种方法为相同的植物分配以下值:

(186.6377,207.7993,179.8552,225.7226,212.0066,215.8321,218.337,199.9707,179.5959,203.2275,212.2286,212.5489)

如何将第二组值转换为0到10比例,以便比较分配给每个工厂的值? 我见过的最近的是the scale function. Unfortunately, it deals with ranges of 0 to 1

2 个答案:

答案 0 :(得分:0)

平均每组,并通过乘以它将其缩放到10。

set2 = [186.6377, 207.7993, 179.8552, 225.7226, 212.0066, 215.8321, 218.337, 199.9707, 179.5959, 203.2275, 212.2286, 212.5489]

cset2 = [10*x/max(set2) for x in set2]

cset2的内容?

[8.268454288582534,
 9.205958995687627,
 7.967974850546644,
 10.0,
 9.392351496925873,
 9.561829431346263,
 9.672801925903741,
 8.859135062240112,
 7.95648729901215,
 9.003418355096032,
 9.40218657768429,
 9.41637656131907]

答案 1 :(得分:0)

您可以制作转换功能:

def convert(x,a,b,c=0,d=1):
    """converts values in the range [a,b] to values in the range [c,d]"""
    return c + float(x-a)*float(d-c)/(b-a)

例如:

>>> convert(215.8321,170,230,0,10)
7.638683333333333

(将170230替换为最小值/最大值,但问题说明中未提供这些值。