tôi có một danh sách int giá trị:Làm thế nào để bình thường hóa một danh sách các int đánh giá cao
List<int> histogram;
Làm thế nào để bình thường hóa tất cả các giá trị để các giá trị tối đa trong danh sách luôn là 100?
tôi có một danh sách int giá trị:Làm thế nào để bình thường hóa một danh sách các int đánh giá cao
List<int> histogram;
Làm thế nào để bình thường hóa tất cả các giá trị để các giá trị tối đa trong danh sách luôn là 100?
Lặp lại mặc dù, tìm giá trị lớn nhất (gọi là MAXVAL
), sau đó lặp lại một lần nữa và nhân mỗi giá trị trong danh sách theo (100/MAXVAL)
.
var ratio = 100.0/list.Max();
var normalizedList = list.Select(i => i * ratio).ToList();
Nếu bạn có danh sách các số dương hoàn toàn, thì câu trả lời của Dav sẽ phù hợp với bạn.
Nếu danh sách có thể là bất kỳ số nào, thì bạn cũng cần phải chuẩn hóa theo hướng xuống.
Giả sử một giới hạn trên 100 và dưới của 0, bạn sẽ muốn một cái gì đó như thế này ...
var max = list.Max();
var min = list.Min();
var range = (double)(max - min);
var normalised
= list.Select(i => 100 * (i - min)/range)
.ToList();
Xử lý trường hợp min == max
là trái như một bài tập cho người đọc ...
để bình thường hóa một tập hợp các số có thể chứa các giá trị âm,
và để xác định phạm vi quy mô bình thường của:
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);
về số âm? – Kobi
oh và giá trị tối đa có thể là 0, vì vậy bạn có 100/0. – Kobi
Có, trường hợp ranh giới đó có lẽ nên được kiểm tra - mặc dù không có cách nào thực sự tốt để 'bình thường hóa' một danh sách tất cả đều bằng không. – Amber