각 행의 0이 아닌 개수를 가져 와서 각 행의 합계를 평균하는 데 사용합니다. 과 같이, np.true_divide
를 대체하는 당신이 NumPy와의 이전 버전에있는 경우, 당신은 카운트의 부동 소수점 변환을 사용할 수 있습니다
np.true_divide(matrix.sum(1),(matrix!=0).sum(1))
- - 따라서, 구현은 다음과 같을 것이다
matrix.sum(1)/(matrix!=0).sum(1).astype(float)
샘플 실행 -
In [160]: matrix
Out[160]:
array([[0, 0, 1, 0, 2],
[1, 0, 0, 2, 0],
[0, 1, 1, 0, 0],
[0, 2, 2, 2, 2]])
In [161]: np.true_divide(matrix.sum(1),(matrix!=0).sum(1))
Out[161]: array([ 1.5, 1.5, 1. , 2. ])
또 다른 방법은 문제가 대체하는 것입니다 해결하기 위해 NaNs
과 제로는 다음과 같이 그 NaNs
효과 그 원래의 zeros
에를 무시 것이다, np.nanmean
사용 -
np.nanmean(np.where(matrix!=0,matrix,np.nan),1)
보기의 성능 관점에서, 나는 첫 번째 방법을 추천 할 것입니다.
np는 (는) 속성 없음 true_divide – HimanAB
@HimanUCC 수정 사항을 확인하십시오. – Divakar
마스크 된 배열 접근법은 작지만 (반드시 빠를 필요는 없음) :'np.ma.masked_equal (matrix, 0) .mean (axis = 1)' – hpaulj