복붙노트

[PYTHON] NumPy에서 배열을 정규화하는 방법?

PYTHON

NumPy에서 배열을 정규화하는 방법?

하나의 NumPy 배열의 규범을 갖고 싶습니다. 더 구체적으로, 나는이 함수의 동등한 버전을 찾고있다.

def normalize(v):
    norm = np.linalg.norm(v)
    if norm == 0: 
       return v
    return v / norm

스 캐인이나 numpy에 그런 것이 있습니까?

이 함수는 v가 0 벡터 인 상황에서 작동합니다.

해결법

  1. ==============================

    1.scikit-learn을 사용한다면 sklearn.preprocessing.normalize를 사용할 수 있습니다 :

    scikit-learn을 사용한다면 sklearn.preprocessing.normalize를 사용할 수 있습니다 :

    import numpy as np
    from sklearn.preprocessing import normalize
    
    x = np.random.rand(1000)*10
    norm1 = x / np.linalg.norm(x)
    norm2 = normalize(x[:,np.newaxis], axis=0).ravel()
    print np.all(norm1 == norm2)
    # True
    
  2. ==============================

    2.그러한 기능이 포함 된 배터리의 일부라면 좋았다고 나는 동의 할 것이다. 그러나 내가 아는 한 그것은 아닙니다. 여기에는 임의의 축에 대한 버전이 있으며 최적의 성능을 제공합니다.

    그러한 기능이 포함 된 배터리의 일부라면 좋았다고 나는 동의 할 것이다. 그러나 내가 아는 한 그것은 아닙니다. 여기에는 임의의 축에 대한 버전이 있으며 최적의 성능을 제공합니다.

    import numpy as np
    
    def normalized(a, axis=-1, order=2):
        l2 = np.atleast_1d(np.linalg.norm(a, order, axis))
        l2[l2==0] = 1
        return a / np.expand_dims(l2, axis)
    
    A = np.random.randn(3,3,3)
    print(normalized(A,0))
    print(normalized(A,1))
    print(normalized(A,2))
    
    print(normalized(np.arange(3)[:,None]))
    print(normalized(np.arange(3)))
    
  3. ==============================

    3.ord를 지정하여 L1 표준을 가져올 수 있습니다. 제로 분할을 피하기 위해 나는 eps를 사용하지만 위대한 것은 아닐 수도 있습니다.

    ord를 지정하여 L1 표준을 가져올 수 있습니다. 제로 분할을 피하기 위해 나는 eps를 사용하지만 위대한 것은 아닐 수도 있습니다.

    def normalize(v):
        norm=np.linalg.norm(v, ord=1)
        if norm==0:
            norm=np.finfo(v.dtype).eps
        return v/norm
    
  4. ==============================

    4.이것은 또한 당신을 위해 일할 수도 있습니다.

    이것은 또한 당신을 위해 일할 수도 있습니다.

    import numpy as np
    normalized_v = v / np.sqrt((np.sum(v**2)))
    

    v가 길이 0 일 때 실패합니다.

  5. ==============================

    5.다차원 데이터가 있고 각 축을 자체로 정규화하려면 다음을 수행하십시오.

    다차원 데이터가 있고 각 축을 자체로 정규화하려면 다음을 수행하십시오.

    def normalize(d):
        # d is a (n x dimension) np array
        d -= np.min(d, axis=0)
        d /= np.ptp(d, axis=0)
        return d
    

    피크 투 피크 기능을 사용합니다.

  6. ==============================

    6.Christoph Gohlke가 대중적인 변환 모듈에서 벡터를 정규화하는 함수 unit_vector ()도 있습니다 :

    Christoph Gohlke가 대중적인 변환 모듈에서 벡터를 정규화하는 함수 unit_vector ()도 있습니다 :

    import transformations as trafo
    import numpy as np
    
    data = np.array([[1.0, 1.0, 0.0],
                     [1.0, 1.0, 1.0],
                     [1.0, 2.0, 3.0]])
    
    print(trafo.unit_vector(data, axis=1))
    
  7. ==============================

    7.3D 텐서에 저장된 n 차원 특징 벡터를 정규화하려면 PyTorch를 사용할 수도 있습니다.

    3D 텐서에 저장된 n 차원 특징 벡터를 정규화하려면 PyTorch를 사용할 수도 있습니다.

    import numpy as np
    from torch import FloatTensor
    from torch.nn.functional import normalize
    
    vecs = np.random.rand(3, 16, 16, 16)
    norm_vecs = normalize(FloatTensor(vecs), dim=0, eps=1e-16).numpy()
    
  8. from https://stackoverflow.com/questions/21030391/how-to-normalize-an-array-in-numpy by cc-by-sa and MIT license