Масштабировать список чисел от -1,0 до 1,0

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

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

11
задан Johnny 13 May 2014 в 10:46
поделиться

3 ответа

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

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

2 - преобразовать каждое число, используя эти выражения signedNormal = (((originalNumber - Minimum) / (Maximum - Minimum)) * 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

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

5
ответ дан 3 December 2019 в 05:11
поделиться

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

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

Например,

[ -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 за то, что подсказал мне это своим очень полезным комментарием :)

1
ответ дан 3 December 2019 в 05:11
поделиться

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

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

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

  1. min масштабируется до -1
  2. , а max масштабируется до 1

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

16
ответ дан 3 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: