2017-01-19 6 views
1

여러 개의 2D 테이블을 나타내는 3D numpy 배열 [tbl_idx, rows, cols]이 있습니다. 모든 테이블의 모든 행을 합친 다음 모든 테이블의 모든 요소를 ​​해당 행 합계로 나누고 싶습니다.2D 행 합계로 3D 배열 나누기?

e.e.

ary.sum(axis=2).astype(np.float) 

하지만 올바른 부문을 수행하는 방법을 알아낼 수 없습니다 3D 진/2D- : 모든 테이블에 ..

나는 다음과 같은 방법으로 행 합계를 할 수

행 확률 기반 행 합계.

알고 계십니까?

답변

3

당신은 합산 동안 차원의 수를 유지하기 위해 keepdims=1를 사용하고 단순히 분할을 수행 그래서 같은 수 - 당신은 이미 합계가 저장 한 경우, 우리는에 의해 3D로 확장 할 수

ary/ary.sum(axis=2, keepdims=1).astype(np.float) 

또는 그래서 같은 None/np.newaxis 가진 새로운 축을 도입하고 분할을 수행 -

ary/ary.sum(axis=2).astype(np.float)[...,None] 

를 들어 summatio ns가 zeros 인 경우 출력의 해당 위치에 NaNsInfs이 표시됩니다. 분할 출력을 얻기 위해 이전 코드를 사용, 또는

sums = ary.sum(axis=1,keepdims=1) 
out = np.where(sums!=0, ary/sums.astype(np.float),0) 

마지막으로 유한 한 것들에 대한보고 zeros로 설정 나머지 - -

np.where(np.isfinite(out1), out1,0) # out1 is o/p from earlier section 
출력에 zeros로 사람들을 설정하려면, 하나의 방법은 np.where을 사용하는 것입니다
+0

super cool;), 모든 나노와 inf를 0으로 설정하는 방법이 있습니다. 나는 작전 전에 1을 더할 수는 있지만 지름길이 있는지 궁금해하고 있었다. – user1019129

+0

나는 이것을했다 : ary [np.isnan (ary)] = 0. 내 기본 질문에 대답했기 때문에 질문을 닫을 것이다. 고마워. – user1019129