2014-02-26 95 views
0

我使用ndimage來填充多個形狀(詳細地說,我使用命令ndimage.binary_fill_holes,ndimage.label,ndimage.sumndimage.center_of_mass)。當我運行代碼時,出現以下警告:Scipy運行時警告

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/ 
python/scipy/ndimage/measurements.py:1163: RuntimeWarning: invalid 
value encountered in divide 
results = [sum(input * grids[dir].astype(float), labels, index)/
normalizer for dir in range(input.ndim)] 

我該如何解決這個問題?

+0

您可以提供代碼(簡化,如果適用),您可以在結果等式中定義變量嗎?以便其他人能夠重現錯誤。 – hackyday

回答

0

只有當您有0/0inf/inf部門時纔會出現此錯誤。

這意味着,在列表解析中for迴路中的至少一個情況下,你的變量normalizer,並在同一時間sum()返回值都是0或兩者+/-inf

生成錯誤的代碼片段屬於center_of_mass(input, labels=None, index=None)source)。

你打電話給center_of_mass()

一種可能性,如果你沒有指定labelindex。在這種情況下,只有當輸入數組的平均值爲零時,變量normalizer纔可以爲零。在這種情況下,您可以在通話前檢查input.sum()的值嗎?一個微不足道的可能性是輸入是一個零數組。在這種情況下,你會得到一個0/0

如果您要提供labelindex,則在撥打center_of_mass()之前,輸入有任何問題。

如果您不知道問題出在哪裏,請嘗試打印一些數據。此類錯誤的結果爲nan值:center_of_mass()將返回像(nan, nan)這樣的元組。

+1

警告是由於'ndimage.center_of_mass'中的一個錯誤:我使用'blob_CM = ndimage.center_of_mass(mask_2_filled,label_im,range(nb_labels + 1))'調用它。正確的形式是'blob_CM = ndimage.center_of_mass(mask_2_filled,label_im,label_center)'。我從[這裏]獲取了語法(http://www.tp.umu.se/~nylen/pylect/advanced/image_processing/index.html#id14)。 –