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이어야합니다. 그러나 나는 그것이 대부분의 사람들에게 분명 할 것이라고 생각합니다.
답변
답변
Scikit-learn은 normalize()다양한 정규화를 적용 할 수 있는 기능 을 제공합니다 . “합을 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.]) 
답변
나는 다음과 같이 행 요소 합계를 1로 정규화 할 수 있다고 생각합니다
     new_matrix = a / a.sum(axis=1, keepdims=1). 그리고 열 정규화는 new_matrix = a / a.sum(axis=0, keepdims=1). 이것이 hep 수 있기를 바랍니다.
답변
내장 numpy 함수를 사용할 수 있습니다.
np.linalg.norm(a, axis = 1, keepdims = True)
답변
이것도 작동하는 것 같습니다
def normalizeRows(M):
    row_sums = M.sum(axis=1)
    return M / row_sums