【发布时间】:2011-11-03 09:27:21
【问题描述】:
我有一个 int 值列表:
List<int> histogram;
如何标准化所有值以使列表中的最大值始终为 100?
【问题讨论】:
我有一个 int 值列表:
List<int> 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<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);
【讨论】: