2016-12-28 54 views
1

隨着代碼:SciPy的generic_filter投返回值

def stat_function(x): 
    center = x[len(x)/2] 
    ecdf = ECDF(xx) 
    percentile = (1 - ecdf(center)) * 100 
    print percentile 
    return percentile 

主:

print generic_filter(table, 
    function=stat_function, 
    size=window_size, 
    mode=mode, 
    extra_arguments=(-1,)) 

我得到的輸出:

[[84 76 76 76 76 76 76 76 76 60] 
[52 48 48 48 48 48 48 48 48 39] 
[52 48 48 48 48 48 48 48 48 39] 
[52 48 48 48 48 48 48 48 48 39] 
[52 48 48 48 48 48 48 48 48 39] 
[52 48 48 48 48 48 48 48 48 39] 
[52 48 48 48 48 48 48 48 48 39] 
[52 48 48 48 48 48 48 48 48 39] 
[52 48 48 48 48 48 48 48 48 39] 
[24 15 15 15 15 15 15 15 15 0]] 

一切都很好,但如果我打印的「百分'在我的函數返回之前,我看到我所有的15s實際上是16.0s,而我的39s是40.0s。函數generic_filter需要re轉動一個浮點數並返回「16.0」,但在構建的數組中,它被轉換爲一個int並變成「15」。事實上 print percentile, int(percentile)將顯示 「16.0,15」。
如果有人可以幫助我瞭解爲什麼這個SciPy的的功能需要一個浮動,然後扔在一個int,爲什麼INT(16.0)給出了15,我在這裏。

PS:即使numpy.array(generif_filter(...), dtype=numpy.float),我得到的整數的錯誤的表。

回答

0

哇,該溶液是棘手的。 Scipy會將所返回的表格的所有值轉換爲第一個表格的類型。
對於爲例:

table = [0,1,2,3,4,5,6,7,8,9] 
generic_filter(table, ...) # returns a table of integers 
table = numpy.array(table, numpy.float) 
generic_filter(table, ...) # returns this time a table of floats 

所以,如果像我一樣沒有道理SciPy的蒙上他的輸出,改變你的輸入;)

相關問題