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中执行此操作?
不知道是否有内置的(可能没有,这实际上并不是一件困难的事情)。您可以将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)