如何在scipy中找到已弃用函数的替换?

时间:2017-09-05 04:14:08

标签: python numpy scipy

例如,根据doc弃用了此threshold函数。

然而,该文件没有说明任何替代品。它刚刚消失了,还是已经有了替代品?如果是这样,如何找到替换功能?

2 个答案:

答案 0 :(得分:3)

需要花一点时间,但这里是thresholdscipy/stats/mstats_basic.py)的代码:

def threshold(a, threshmin=None, threshmax=None, newval=0):
    a = ma.array(a, copy=True)
    mask = np.zeros(a.shape, dtype=bool)
    if threshmin is not None:
        mask |= (a < threshmin).filled(False)

    if threshmax is not None:
        mask |= (a > threshmax).filled(False)

    a[mask] = newval
    return a

但在此之前我发现了,我从文档中反过来设计了它:

docs中的示例数组:

In [152]: a = np.array([9, 9, 6, 3, 1, 6, 1, 0, 0, 8])
In [153]: stats.threshold(a, threshmin=2, threshmax=8, newval=-1)
/usr/local/bin/ipython3:1: DeprecationWarning: `threshold` is deprecated!
stats.threshold is deprecated in scipy 0.17.0
  #!/usr/bin/python3
Out[153]: array([-1, -1,  6,  3, -1,  6, -1, -1, -1,  8])

建议更换

In [154]: np.clip(a,2,8)
Out[154]: array([8, 8, 6, 3, 2, 6, 2, 2, 2, 8])
....

剪裁到最大或最小是有道理的;另一方面,阈值将所有越界值转换为其他值,例如0或-1。听起来没那么有用。但它并不难实现:

In [156]: mask = (a<2)|(a>8)
In [157]: mask
Out[157]: array([ True,  True, False, False,  True, False,  True,  True,  True, False], dtype=bool)
In [158]: a1 = a.copy()
In [159]: a1[mask] = -1
In [160]: a1
Out[160]: array([-1, -1,  6,  3, -1,  6, -1, -1, -1,  8])

这与我引用的代码基本相同,区别仅在于它如何处理最小或最大的None情况。

答案 1 :(得分:0)

对于它的价值,如果使用得当,np.clip是阈值的直接替代:

np.clip(array-threshold,0,1)