Как реализовать распределение вероятностей в зависимости от значений?
Добрый день.
Такой вопрос допустим имеем массив значений (2,22,41,25,64,33,2,3,4,...etc)
Как распределить веса в зависимости от величины в порядке чем меньше значение тем больше вероятность выбора у данного элемента. Сумма у всех вероятностей будет равна 1 а максимальная должна быть у элементов с цифрой 2.
Стыдно признавать но ничего в голову не идёт.
1. "чем меньше значение тем меньше вероятность"
2. "максимальная должна быть у элементов с цифрой 2"
По крайней мере для вашего пример эти фразы противоречат друг другу.
Если считать, что в формулировке вопроса присутствует ошибка (см. комментарий выше), то естественно напрашивающийся ответ следующий:
1. Считаем сумму всех элементов. Получаем некое S.
2. Для каждого элемента вашего массива s[i] считаем p[i]=s[i]/S.
(3. Если в массиве присутствуют одинаковые элементы, их значения p[] складываем.- Пункт связан с неполной формулировкой задания. Нужен он или нет - разбирайтесь сами.)
Ясно, что сумма всех p[i] равна 1.
Ясно, что значение p[i] прямо пропорционально значению s[i].
Спасибо, большую часть так и сделал. В вопросе и правда есть ошибка "чем меньше значение тем больше вероятность". Грубо говоря нужно обратное распределение.
Так же думал над нормализацией но пока без неё.
Сейчас у меня есть возможность использовать список весов тем самым я могу отнимая от единицы получившийся маленький вес 2-ки сделать большим. Но это не совсем правильно не могу понять как сделать так что бы вероятность имела отрицательную обратную связь в зависимости от величины.
Ага кажись понял если я отниму от единицы получившуюся вероятность то если я опять сложу все такие обратные вероятности для чисел и начну делить эти обратные вероятности на их сумму то получу ситуацию когда меньшему числу соответствует большая вероятность.
Немного не так. В таком случае вам надо сначала преобразовать ваш ряд к виду s[i]=1/s[i]. А потом именно эти обратные значения складывать . На Python это будет выглядеть примерно так: