벡터를 임의의 범위로 표준화

적당한 벡터 $v$를 범위 $[0, 1]$ 이나 $[-1, 1]$ 에 표준화할 기회는 많네요.
이제 $v$ 를 다음과 같이 임의의 숫자를 가진 벡터로 만듭니다.

random_vector.py

import random
random.seed(1)
v = [random.random() for _ in range(10)]


위의 python 코드에서 $v$ 는 예를 들면 다음과 같이 주어진다.



이 벡터를 범위 $[0,1],[-1,1]$로 표준화하려면 각각 이렇게 합니다.
  • $[0,1]$로 표준화
  • 
    \frac{v - min(v)}{max(v) - min(v)}
    
    
  • $[-1,1]$ 로 표준화
  • 
    \frac{2v - (max(v) + min(v))}{max(v)-min(v)}
    
    

      이것은 $v$를 선형으로 표준화합니다.



    단지, 벡터를 임의의 범위 [newmin, newmax] 에 표준화하고 싶을 때가 있네요.

    그런 경우에는 먼저 2개의 정수 $a, b$ 를 계산합니다.
    
    a = (newmax - newmin)/(max(v) - min(v)) \\
    b = newmax - a*max(v)
    
    

    이 때, $b = newmin - a*min(v)$에서도 같습니다.

    마지막으로, $a$ 가 기울여, $b$ 가 절편이 되는 1차 함수를 만들어, 원의 벡터 $v$ 를 대입하면, 선형으로 표준화된 새로운 벡터가 나옵니다.
    
    normalized\ vector = a*v + b
    
    

      이것이 벡터를 선형으로 표준화할 때의 일반형입니다.

    Python, Matlab에서 벡터 $v$를 범위 [newmin, newmax]로 표준화하는 코드를 올려 놓습니다.

    파이썬

    normalize.py
    
    def normalize(v,newmin,newmax):
        a = (newmax - newmin)/(max(v) - min(v))
        b = newmax - a*max(v)
    
        return [a*i + b for i in v]
    
    


    Matlab

    normalize.m
    
    function [normalized_vector] = normalize(v, newmin, newmax)
    
    a = (newmax - newmin)/(max(v) - min(v));
    b = newmax - max(v)*a;
    
    normalized_vector = a*v + b;
    
    

    좋은 웹페이지 즐겨찾기