2015-01-08 2 views
6

두 개의 numpy 배열이 있는데 하나를 다른 것과 동시에 나눌 때 동시에 제수가 0 인 항목을numpy : true_divide에서 유효하지 않은 값

log_norm_images = np.where(b_0 > 0, np.divide(diff_images, b_0), 0) 

이 나에게의 실행시 경고 제공 : 0

그래서, 내가 뭔가 같이 할 지금

RuntimeWarning: invalid value encountered in true_divide 

을, 나는 무슨 일이 벌어지고보고 싶어하고 내가했다 수행원:

xx = np.isfinite(diff_images) 
print (xx[xx == False]) 

xx = np.isfinite(b_0) 
print (xx[xx == False]) 

그러나 둘 다 빈 배열을 반환하므로 배열의 모든 값이 유한합니다. 그래서 잘못된 값이 어디서 오는지 확실하지 않습니다. np.where 함수의 b_0> 0이 0으로 나누는 것을 처리한다고 가정합니다.

두 배열의 모양은 (96,96,55,64) 및 (96,96,55,1)입니다.)

+0

왜'xx'가'거짓'과 사전일까요? – seequ

+0

isfinite는 부울 배열을 반환한다고 생각합니다. 그래서 값이 유한하지 않은 장소를 찾고 있습니다. – Luca

+0

'[x가 x = x이면 x는 x == 거짓]'을 시도하십시오. 당신은 단지'False' 키를 가져 오려고합니다. – seequ

답변

5

어딘가에 NAN, INF 또는 NINF이 떠있을 수 있습니다. 이 시도 :

np.isfinite(diff_images).all() 
np.isfinite(b_0).all() 

하나 또는 그 반환 False의 두 경우, 즉 가능성이 런타임 오류의 원인입니다.

+0

이것은 하나 이상의 요소가있는 배열의 진리 값이 모호합니다. a.any() 또는 a.all()을 사용합니다. – Luca

+0

@Luca 죄송합니다. 대답을 편집했습니다. 잠시 동안 다차원 배열을 다루는 것을 잊었습니다. :) – rchang

+0

감사. 그들은 모두 사실을 반환 :/ – Luca