[PYTHON] NumPy에서 배열을 정규화하는 방법?
PYTHONNumPy에서 배열을 정규화하는 방법?
하나의 NumPy 배열의 규범을 갖고 싶습니다. 더 구체적으로, 나는이 함수의 동등한 버전을 찾고있다.
def normalize(v):
norm = np.linalg.norm(v)
if norm == 0:
return v
return v / norm
스 캐인이나 numpy에 그런 것이 있습니까?
이 함수는 v가 0 벡터 인 상황에서 작동합니다.
해결법
-
==============================
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.그러한 기능이 포함 된 배터리의 일부라면 좋았다고 나는 동의 할 것이다. 그러나 내가 아는 한 그것은 아닙니다. 여기에는 임의의 축에 대한 버전이 있으며 최적의 성능을 제공합니다.
그러한 기능이 포함 된 배터리의 일부라면 좋았다고 나는 동의 할 것이다. 그러나 내가 아는 한 그것은 아닙니다. 여기에는 임의의 축에 대한 버전이 있으며 최적의 성능을 제공합니다.
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.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.이것은 또한 당신을 위해 일할 수도 있습니다.
이것은 또한 당신을 위해 일할 수도 있습니다.
import numpy as np normalized_v = v / np.sqrt((np.sum(v**2)))
v가 길이 0 일 때 실패합니다.
-
==============================
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.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.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()
from https://stackoverflow.com/questions/21030391/how-to-normalize-an-array-in-numpy by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 최소한의 플러그인 아키텍처 구현하기 (0) | 2018.10.16 |
---|---|
[PYTHON] def main ()을 사용하는 이유는 무엇입니까? [복제] (0) | 2018.10.16 |
[PYTHON] 이미지가 주어진 미로를 표현하고 해결합니다. (0) | 2018.10.16 |
[PYTHON] venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv 등의 차이점은 무엇입니까? (0) | 2018.10.16 |
[PYTHON] django에서 비즈니스 로직과 데이터 액세스 분리 (0) | 2018.10.16 |