我有以下情况:
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之间,我只是在寻找一种在两个值之间缩放/归一化数据的通用方法。
答案 0 :(得分:1)
您基本上正在寻找min
和max
之间的线性插值:
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])