Diese ist ein bekannter Weg, um eine Sammlung Zahlen zu skalieren. Es hat einen präziseren Namen, aber ich kann mich nicht erinnern und versage es zu googeln.
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]
Wie Sie sehen können, müssen Sie Rundungsfragen beachten. Sie sollten wahrscheinlich auch sicherstellen, dass Sie keine ganzen Zahlen als min & max erhalten, weil eine Ganzzahl-Division das Ergebnis beschädigen wird.
Sind Sie sicher, dass dies Datennormalisierung genannt wird? Sie sollten erwägen, diese Datenumwandlung aufzurufen. Ich glaube, dass sich die Normalisierung auf die Topologie der Daten bezieht. – jrhicks