scipy generic\u filter强制转换返回值

2024-05-18 23:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

使用代码:

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.0,39实际上都是40.0。函数generic\u filter要求返回一个float,并返回“16.0”,但在构建的数组中,它被转换为int并变为“15”。的确 print percentile, int(percentile)将显示“16.0,15”。
如果有人能帮助我理解为什么这个scipy函数需要一个float,然后把它转换成int,为什么int(16.0)给出15,我就在这里

PS:即使使用numpy.array(generif_filter(...), dtype=numpy.float),我也得到了错误的整数表


Tags: 函数代码numpysizemodefunctionfloatfilter
1条回答
网友
1楼 · 发布于 2024-05-18 23:26:03

哇,解决办法很棘手。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无缘无故地抛出他的输出,请更改您的输入;)

相关问题 更多 >

    热门问题