如何将矢量标准化为[0 10]范围

时间:2018-06-15 11:22:45

标签: python math

嗨我有一个向量,其中min是5.748113263784852,最大值是175.5 我想将这些值缩放到0到10(1 2 3 ... 10)。 我怎么办?

2 个答案:

答案 0 :(得分:2)

另一个想法是首先通过将每个元素除以所有值的平方和的平方根来规范化向量:

magnitude = sqrt(sum(v[i]*v[i]))
normalized = v[i]/magnitude

这为您提供了一个幅度等于1.0的向量,每个分量都在[-1,1]

范围内

一旦你有了标准化的向量,就可以很容易地根据需要进行翻译和缩放。

这是一个更加数学化,不那么特别的问题解决方法。

答案 1 :(得分:1)

如评论中所述:
首先从每个元素中扣除最小值 然后,找到结果向量的最大值 最后,除以得到的向量的每个值,并乘以10

def normalize_zero_to_ten(vector):
    """assumes all values of vector are positive
    """
    mini = min(vector)
    vec = [elt-mini for elt in vector]
    correction = 1 / (max(vec) * 10)   
    # elt * correction is equivalent to divide by max and multiply by 10
    return [elt * correction for elt in vec]


if __name__ == '__main__':

    v = [5.5, 26, 175, 32]
    print(normalize_zero_to_ten(v))

输出:

[0.0, 1.2094395280235988, 10.0, 1.5634218289085546]