在两个值之间缩放/变换/归一化NumPy数组

时间:2019-06-19 09:18:34

标签: python numpy

我有以下情况:

value_range = [250.0, 350.0]
precision = 0.01
unique_values = len(np.arange(min(values_range), 
                              max(values_range) + precision, 
                              precision))

这意味着所有值的范围在250.0到350.0之间,精度为0.01,从而给出了该数据集可能具有的10001个唯一值。

# This is the data I'd like to scale
values_to_scale = np.arange(min(value_range), 
                            max(value_range) + precision, 
                            precision) 

# These are the bins I want to assign to
unique_bins = np.arange(1, unique_values + 1)

您可以在上面的示例中看到,values_to_scale中的每个值都将精确映射到unique_bins数组中的对应项。即值250.0(values_to_scale[0])等于1.0(unique_bins[0])等。

但是,如果我的values_to_scale数组看起来像:

values_to_scale = np.array((250.66, 342.02)) 

如何进行缩放/转换以获得唯一的bin值?即250.66应该等于66,但是如何获得呢?

注意 value_range可以介于-1和1之间,我只是在寻找一种在两个值之间缩放/归一化数据的通用方法。

1 个答案:

答案 0 :(得分:1)

您基本上正在寻找minmax之间的线性插值:

minv = min(value_range)
maxv = max(value_range)
unique_values = int(((maxv - minv) / precision) + 1)
((values_to_scale - minv) / (maxv + precision - minv) * unique_values).astype(int)
# array([  65, 9202])