Удостоверьтесь сериализация, завершенная, и что тип сериализации соответствует типу десериализации (т.е. удостоверьтесь, что Вы сериализируете с BinaryFormatter, если Вы десериализовываете с одним). Кроме того, удостоверьтесь, что поток Вы сериализировали к действительно законченной сериализации с Потоком. Сброс () или что-то к тому эффекту.
Вот фрагмент кода, предполагающий, что вам нужна линейная нормализация. Это очень упрощенная версия (просто прямой код, без методов), поэтому вы можете увидеть, «как это работает», и применить ее к чему угодно.
xmin = 1.0
xmax = 30000.0
ymin = 0.1
ymax = 10.0
xrange = xmax-xmin
yrange = ymax-ymin
y = ymin + (x-xmin) * (yrange / xrange)
А здесь это сделано как функция:
def normalise(x, xmin, xmax, ymin, ymax)
xrange = xmax - xmin
yrange = ymax - ymin
ymin + (x - xmin) * (yrange.to_f / xrange)
end
puts normalise(2000, 1, 30000, 0.1, 10)
(Примечание: to_f
гарантирует, что мы не попадем в черную дыру целочисленного деления)
Это хорошо известный способ масштабирования номеров коллекции. У него более точное название, но я не могу вспомнить и не могу его погуглить.
def scale(numbers, min, max)
current_min = numbers.min
current_max = numbers.max
numbers.map {|n| min + (n - current_min) * (max - min) / (current_max - current_min)}
end
dataset = [1,30000,15000,200,3000]
result = scale(dataset, 0.1, 10.0)
=> [0.1, 10.0, 5.04983499449982, 0.165672189072969, 1.08970299009967]
scale(result, 1, 30000)
=> [1.0, 30000.000000000004, 15000.0, 199.99999999999997, 3000.0000000000005]
Как видите, вы должны знать о проблемах с округлением. Вероятно, вам также следует убедиться, что вы не получаете целые числа как min и max, потому что целочисленное деление повредит результат.