使用代码:
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]]
一切都很好但是如果我在返回之前在我的函数中打印“百分位数”,我看到我的所有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)
,我也得到了错误的整数表。
答案 0 :(得分:0)
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演员没有理由他的输出,改变你的输入;)