2015-01-08 59 views
6

我有兩個numpy數組,我試圖用另一個除另一個,並且同時我想確保除數爲0的條目應該被替換爲0numpy:在true_divide中遇到的值無效

所以,我做這樣的事情:

log_norm_images = np.where(b_0 > 0, np.divide(diff_images, b_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'是'False'和字典? – seequ

+0

我認爲isfinite返回一個布爾數組。所以,我正在尋找價值不是有限的地方。 – Luca

+0

嘗試'[x for x in xx if x == False]''。你只是想獲取鑰匙'False' – seequ

回答

5

您可能在某處有一個NANINFNINF浮動。試試這個:

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

如果一個或兩個那些回報False的,這是有可能的運行時錯誤的原因。

+0

這引發了具有多個元素的數組的真值是不明確的。使用a.any()或a.all() – Luca

+0

@Luca對不起,編輯了答案 - 我忘了你正在處理多維數組。 :) – rchang

+0

謝謝。但他們都返回true:/ – Luca

相關問題