NumPy数组以0和1为界?

use*_*216 6 python arrays numpy

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

def to01(array):
    array -= array.min()
    array /= array.max()
    return array
Run Code Online (Sandbox Code Playgroud)

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

问题是我在项目中的各个方面经常这样做,这似乎是一个相当标准的数学运算.是否有内置函数在NumPy中执行此操作?

gre*_*chd 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)
Run Code Online (Sandbox Code Playgroud)