如何将NumPy数组限制在0到1之间?

6 投票
1 回答
1149 浏览
提问于 2025-04-21 04:51

基本上,我有一个数组,这个数组的数值可能在两个数字之间变化,我想保持这个数组的分布,同时把它限制在[0,1]这个范围内。实现这个功能的方法非常简单。我通常会写成:

def to01(array):
    array -= array.min()
    array /= array.max()
    return array

当然,这个方法可以也应该更复杂一些,以应对很多情况,比如所有的值都一样(会出现除以零的情况)以及浮点数和整数的除法(应该用np.subtract和np.divide,而不是直接用运算符)。不过这就是最基本的做法。

问题是,我在项目中经常需要做这个操作,而且这看起来是一个相当标准的数学操作。NumPy里面有没有现成的函数可以做到这一点呢?

1 个回答

2

我不知道有没有现成的功能可以做到这一点(可能没有,因为这其实并不是很难)。你可以使用 vectorize 来对数组里的所有元素应用一个函数:

def to01(array):
    a = array.min()
    # ignore the Runtime Warning
    with numpy.errstate(divide='ignore'):
        b = 1. /(array.max() - array.min())
    if not(numpy.isfinite(b)):
        b = 0
    return numpy.vectorize(lambda x: b * (x - a))(array)

撰写回答