반응형
파이썬에서 2 차원 numpy 배열을 덜 장황하게 정규화하는 방법은 무엇입니까?
3 x 3 numpy 배열이 주어지면
a = numpy.arange(0,27,3).reshape(3,3)
# array([[ 0, 3, 6],
# [ 9, 12, 15],
# [18, 21, 24]])
2 차원 배열의 행을 정규화하기 위해 생각했습니다.
row_sums = a.sum(axis=1) # array([ 9, 36, 63])
new_matrix = numpy.zeros((3,3))
for i, (row, row_sum) in enumerate(zip(a, row_sums)):
new_matrix[i,:] = row / row_sum
더 나은 방법이 있겠죠?
아마도 정리할 수 있습니다. 정규화하면 행당 항목의 합계가 1이어야합니다. 그러나 나는 그것이 대부분의 사람들에게 분명 할 것이라고 생각합니다.
방송은 이것에 정말 좋습니다.
row_sums = a.sum(axis=1)
new_matrix = a / row_sums[:, numpy.newaxis]
row_sums[:, numpy.newaxis]
row_sums를 존재에서 존재 (3,)
로 재구성합니다 (3, 1)
. 당신이 할 때 a / b
, a
그리고 b
서로에 대해 방송됩니다.
당신은에 대해 자세히 배울 수있는 방송 여기 또는 더 나은 여기를 .
Scikit-learn에는 다양한 정규화를 적용 할 수있는 정규화 기능이 있습니다. "합계를 1로 만들기"는 L1 표준이며이를 수행하려면 다음과 같이하십시오.
from sklearn.preprocessing import normalize
matrix = numpy.arange(0,27,3).reshape(3,3).astype(numpy.float64)
#array([[ 0., 3., 6.],
# [ 9., 12., 15.],
# [ 18., 21., 24.]])
normed_matrix = normalize(matrix, axis=1, norm='l1')
#[[ 0. 0.33333333 0.66666667]
#[ 0.25 0.33333333 0.41666667]
#[ 0.28571429 0.33333333 0.38095238]]
이제 행의 합계가 1이됩니다.
나는 이것이 효과가 있다고 생각한다.
a = numpy.arange(0,27.,3).reshape(3,3)
a /= a.sum(axis=1)[:,numpy.newaxis]
크기가 1이되도록 각 행을 정규화하려는 경우 (즉, 행의 단위 길이가 1이거나 행에있는 각 요소의 제곱의 합이 1) :
import numpy as np
a = np.arange(0,27,3).reshape(3,3)
result = a / np.linalg.norm(a, axis=-1)[:, np.newaxis]
# array([[ 0. , 0.4472136 , 0.89442719],
# [ 0.42426407, 0.56568542, 0.70710678],
# [ 0.49153915, 0.57346234, 0.65538554]])
확인 중 :
np.sum( result**2, axis=-1 )
# array([ 1., 1., 1.])
이것도 작동하는 것 같습니다
def normalizeRows(M):
row_sums = M.sum(axis=1)
return M / row_sums
또는 람다 함수를 사용하여
>>> vec = np.arange(0,27,3).reshape(3,3)
>>> import numpy as np
>>> norm_vec = map(lambda row: row/np.linalg.norm(row), vec)
vec의 각 벡터는 단위 표준을 갖습니다.
행렬 전치를 사용할 수도 있습니다.
(a.T / row_sums).T
다음과 같이 행 요소 합계를 1로 정규화 할 수 있다고 생각합니다 new_matrix = a / a.sum(axis=1, keepdims=1)
. 그리고 열 정규화는 new_matrix = a / a.sum(axis=0, keepdims=1)
. 이것이 hep 수 있기를 바랍니다.
반응형
'Programing' 카테고리의 다른 글
Java 스타일을 사용하는 방법은 C #에서 키워드를 던지나요? (0) | 2020.10.09 |
---|---|
루비에서 .each 루프의 끝을 알려줍니다. (0) | 2020.10.09 |
할당을 해제하는 동안 뷰 컨트롤러의 뷰를로드하려고합니다. UISearchController (0) | 2020.10.09 |
응용 프로그램 도메인을 이해하지 못합니다. (0) | 2020.10.09 |
항목 순서를 유지하면서 목록에서 무작위 샘플을 얻습니까? (0) | 2020.10.09 |