如何将NumPy数组限制在0到1之间?
基本上,我有一个数组,这个数组的数值可能在两个数字之间变化,我想保持这个数组的分布,同时把它限制在[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)