NumPy数组以0和1为界?

时间:2014-09-11 20:23:39

标签: python arrays numpy

基本上我有一个可能在任何两个数字之间变化的数组,我想保留分布,同时将其约束到[0,1]空间。执行此操作的功能非常简单。我通常把它写成:

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

当然,考虑到大量情况可以而且应该更加复杂,例如所有值相同(除以零)和浮点数与整数除法(使用np.subtract和np.divide而不是运算符)。但这是最基本的。

问题是我在项目中经常使用这些内容,这似乎是一个相当标准的数学运算。是否有内置函数在NumPy中执行此操作?

1 个答案:

答案 0 :(得分: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)