基本上我有一个可能在任何两个数字之间变化的数组,我想保留分布,同时将其约束到[0,1]空间。执行此操作的功能非常简单。我通常把它写成:
def to01(array):
array -= array.min()
array /= array.max()
return array
当然,考虑到大量情况可以而且应该更加复杂,例如所有值相同(除以零)和浮点数与整数除法(使用np.subtract和np.divide而不是运算符)。但这是最基本的。
问题是我在项目中经常使用这些内容,这似乎是一个相当标准的数学运算。是否有内置函数在NumPy中执行此操作?
答案 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)