У меня есть список ИНТ значений:Как нормализовать список междунар значений
List<int> histogram;
Как нормализовать все значения, так что максимальное значение в списке всегда 100?
У меня есть список ИНТ значений:Как нормализовать список междунар значений
List<int> histogram;
Как нормализовать все значения, так что максимальное значение в списке всегда 100?
Итерации, найдите максимальное значение (назовите его MAXVAL
), затем повторите попытку и умножьте каждое значение в списке на (100/MAXVAL)
.
var ratio = 100.0/list.Max();
var normalizedList = list.Select(i => i * ratio).ToList();
Если у вас есть список строго положительных чисел, ответ Дава удовлетворит вас.
Если список может быть любым числом вообще, то вам также необходимо нормализовать нижний предел.
Предполагая, верхнюю границу 100 и нижней границей 0, вы хотите что-то вроде этого ...
var max = list.Max();
var min = list.Min();
var range = (double)(max - min);
var normalised
= list.Select(i => 100 * (i - min)/range)
.ToList();
Handling случая, когда min == max
остаются в качестве упражнения для читателя ...
чтобы нормализовать набор чисел, которые могут содержать отрицательные значения,
и определить диапазон нормированных весов:
List<int> list = new List<int>{-5,-4,-3,-2,-1,0,1,2,3,4,5};
double scaleMin = -1; //the normalized minimum desired
double scaleMax = 1; //the normalized maximum desired
double valueMax = list.Max();
double valueMin = list.Min();
double valueRange = valueMax - valueMin;
double scaleRange = scaleMax - scaleMin;
IEnumerable<double> normalized =
list.Select (i =>
((scaleRange * (i - valueMin))
/valueRange)
+ scaleMin);
как насчет отрицательных чисел? – Kobi
oh, а максимальное значение может быть 0, поэтому у вас есть 100/0. – Kobi
Да, этот граничный случай, вероятно, должен быть проверен - хотя нет реального хорошего способа «нормализовать» список, который равен нулю. – Amber