如何规范化int值列表

我有一个int值列表:

List histogram;

如何规范化所有值,使列表中的最大值始终为100?

但是,迭代,找到最大值(称之为MAXVAL ),然后再次迭代并将列表中的每个值乘以(100/MAXVAL)

 var ratio = 100.0 / list.Max(); var normalizedList = list.Select(i => i * ratio).ToList(); 

如果你有一个严格正数的列表,那么Dav的答案对你很好。

如果列表可以是任何数字,那么您还需要规范化到下限。

假设上限为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(); 

处理min == max的情况作为读者的练习…

要规范化可能包含负值的一组数字,
并定义标准化比例的范围:

 List list = new List{-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 normalized = list.Select (i => ((scaleRange * (i - valueMin)) / valueRange) + scaleMin);