[PYTHON] numpy는 행 합계로 행을 나눕니다.
PYTHONnumpy는 행 합계로 행을 나눕니다.
이 행에있는 모든 값의 합계로 열거 형 배열 행을 어떻게 나눌 수 있습니까?
이것이 하나의 예입니다. 그러나 나는 이것을하기위한 공상적이고 훨씬 효율적인 방법이 있다고 확신한다.
import numpy as np
e = np.array([[0., 1.],[2., 4.],[1., 5.]])
for row in xrange(e.shape[0]):
e[row] /= np.sum(e[row])
결과:
array([[ 0. , 1. ],
[ 0.33333333, 0.66666667],
[ 0.16666667, 0.83333333]])
해결법
-
==============================
1.방법 # 1 : None (또는 np.newaxis)을 사용하여 브로드 캐스트가 작동하도록 추가 차원을 추가합니다.
방법 # 1 : None (또는 np.newaxis)을 사용하여 브로드 캐스트가 작동하도록 추가 차원을 추가합니다.
>>> e array([[ 0., 1.], [ 2., 4.], [ 1., 5.]]) >>> e/e.sum(axis=1)[:,None] array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])
방법 2 : go transpose-happy :
>>> (e.T/e.sum(axis=1)).T array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])
(원한다면, 간결성을 위해 축 = 부분을 삭제할 수 있습니다.)
방법 # 3 : (하이메의 의견에서 승격 됨)
sum에 keepdims 인수를 사용하여 차원을 유지합니다.
>>> e/e.sum(axis=1, keepdims=True) array([[ 0. , 1. ], [ 0.33333333, 0.66666667], [ 0.16666667, 0.83333333]])
-
==============================
2.당신은 수학적으로 그것을 할 수 있습니다.
당신은 수학적으로 그것을 할 수 있습니다.
여기에서 E는 원래의 행렬이고 D는 각 행렬이 E의 해당 행의 합인 대각 행렬입니다. 행운을 빌어 D를 가질 수 있다면, 이것은 수학적으로 편리한 방법입니다.
numpy에서 :
import numpy as np diagonal_entries = [sum(e[row]) for row in range(e.shape[0])] D = np.diag(diagonal_entries) D_inv = np.linalg.inv(D) e = np.dot(e, D_inv)
from https://stackoverflow.com/questions/16202348/numpy-divide-row-by-row-sum by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 좌표 사이의 파이썬 변환 (0) | 2018.10.30 |
---|---|
[PYTHON] 파이썬에서는 두 객체가 언제 같습니까? (0) | 2018.10.30 |
[PYTHON] 여러 열을 판다에 동시에 추가 (0) | 2018.10.29 |
[PYTHON] PIL (Python-Imaging)을 사용하여 이미지의 색상을 반전하는 방법은 무엇입니까? (0) | 2018.10.29 |
[PYTHON] 목록에서 부울 값 반전하기 Python (0) | 2018.10.29 |