xStahart Ответов: 2

Вопрос о случайном выборе Python.


Я экспериментировал с python и пробовал разные вещи, и в настоящее время мне было интересно, почему это происходит при случайном выборе

случайные.выбор([0,1,5,100], вес=[0,0,0,0])

он всегда выбирает последний пункт в списке (100). Я знаю, что на самом деле, если у всех есть нулевые возможности, то вы ничего не получите, но здесь он выбирает последний конкретно, и мне было интересно, почему и может ли кто-нибудь объяснить это.

Что я уже пробовал:

попробовал посмотреть на случайный код но я не могу его понять извините я сейчас любитель

Richard MacCutchan

Я не могу найти никакой ссылки на choices() в документации Python для random.

Извините, я только что нашел его в v 3.6.

xStahart

О да, я думаю, не заметил, что это было особенно Ново.

xStahart

Просто чтобы прояснить ситуацию, мне просто интересно, почему он выводит последний элемент, если вы вводите их весовое значение всех 0 каждый..

2 Ответов

Рейтинг:
1

Richard MacCutchan

Я только что попробовал это сделать:

for i in range(10):
	random.choices([0,1,5,100])

и получил следующий результат:
[5]
[0]
[0]
[0]
[100]
[5]
[100]
[100]
[0]
[5]

Похоже, что использование весов всех нулей влияет на результат.


xStahart

Да, мой вопрос заключается в том, почему при введении весов всех 0 он выводит последний элемент(в вашем случае, если вы добавите его, это будет 100)

Richard MacCutchan

Да, и я получил тот же результат. Я предполагаю, что нулевые веса для каждого элемента на самом деле портят систему взвешивания и не должны использоваться; в основном потому, что это не имеет смысла.

Рейтинг:
1

OriginalGriff

Это не так: во-первых, потому что это не так random.choices это random.choice, а во-вторых, из-за статистики:

import random
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
print(random.choice([0,1,2,3]))
Дать мне
1
0
3
1
1
1
1
3
2
2
А потом это:
2
0
2
0
0
2
1
0
2
1
Обратите внимание, что первый тест имеет "прогон" '1 - Чем меньше ваша выборка, тем более вероятен "прогон": имея только четыре элемента на выбор, вполне возможно, что вы получите одно и то же значение несколько раз подряд. Запустите его тысячу раз, и счет сравняется, но в краткосрочной перспективе вы должны ожидать "странных" результатов.


xStahart

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

random.choices(популяция, веса=нет, *, cum_weights=нет, k=1)

затем, если вы ставите веса со всеми 0 возможностями, то он делает то, что я сказал выше. уже пробовал пару раз.

xStahart

Извините за вводящее в заблуждение название, забыл добавить s

markkuk

random.choices-это новая функция, добавленная в Python 3.6 (и более поздние версии)