scipy generic_filter强制转换返回的值

时间:2016-12-28 15:41:18

标签: python python-2.7 numpy casting scipy

使用代码:

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

main:

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]]

一切都很好但是如果我在返回之前在我的函数中打印“百分位数”,我看到我的所有15个实际上都是16.0s而我的39s是40.0s。函数generic_filter需要返回一个浮点数和“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),我也得到了错误的整数表。

1 个答案:

答案 0 :(得分: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演员没有理由他的输出,改变你的输入;)