Масштабировать список чисел от -1,0 до 1,0 - PullRequest
11 голосов
/ 11 августа 2010

Это должно быть легко.

У меня есть список номеров.Как масштабировать значения списка, от -1.0 до 1.0, для min = -1 и max = 1.0?

Ответы [ 3 ]

16 голосов
/ 11 августа 2010

Найдите минимальное и максимальное значения

, затем для каждой шкалы чисел x до 2 * (x - min)/( max - min) - 1

Просто для проверки -

  1. минимальные шкалы-1
  2. и max масштабируются до 1

Если это длинный список с предварительными вычислениями c = 2/(max - min) и масштабирование с c * x - 1 - хорошая идея.

5 голосов
/ 11 августа 2010

Это нормализация со знаком

1 - получить минимальное и максимальное значение в списке (MinVal, MaxVal)

2 - преобразовать каждое число с помощью этих выражений signNormal = (((originalNumber- Минимум) / (Максимум - Минимум)) * 2,0) - 1,0

Я намеренно сделал это неэффективным, чтобы быть понятным - более эффективным будет

double min = myList.GetMinimum();
double max = myList.GetMaximum();
double signedRangeInverse = 1.0 / (max - min);
for(int i = 0;i < myList.NumberOfItems();i++)
  myList[i] = (((myList[i] - min) * signedRangeInverse) * 2.0) - 1

Нет смысла в пересчете диапазонакаждый раз Нет смысла в делении, мульт быстрее

1 голос
/ 11 августа 2010

Если вы хотите, чтобы 0 все равно было равно 0 в конечном результате:

  1. Найдите число с наибольшей величиной. Это будет либо на 1 или -1.
  2. Подумайте, что вам нужно умножить на 1 или -1.
  3. Умножьте все числа в коллекции на этот коэффициент.

1011 * например *

[ -5, -3, -1, 0, 2, 4]

Число с наибольшей величиной -5. Мы можем получить это равным -1, умножив на 0,2 (-1 / -5). (Остерегайтесь деления на 0, если все ваши числа равны 0).

Так что умножьте все элементы на 0,2. Это дало бы:

[-1, -0.6, -0.2, 0, 0.4, 0.8]

Хотя обратите внимание, что

[ -5, -5, -5 ] -> [ -1, -1, -1 ]

и

[ 5, 5, 5 ] -> [ 1, 1, 1 ]

и

[ 0, 0, 0 ] -> [ 0, 0, 0 ]

Это может или не может быть то, что вы хотите. Спасибо @Hammerite за то, что подсказали мне его очень полезным комментарием:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...