Выборка без замены с неравными весамиPython

Программы на Python
Ответить
Anonymous
 Выборка без замены с неравными весами

Сообщение Anonymous »

Я пытаюсь найти алгоритм, который выбирает 12 элементов из списка 25 в соответствии с вероятностью каждого из них. Эти элементы не могут повторяться.
Я пробовал использовать функцию без замены, но не могу заставить ее сохранять веса после 1000 итераций. чтобы проверить правильность выполнения. Мне это удалось, только если я использую функцию с replace = True.
Поскольку эта функция возвращает мне повторяющиеся элементы, я очищаю список, удаляя дубликаты. При этом вероятность того, что я получу каждое число, будет отличаться от той, которую я определил вначале. Я знаю, что ошибка здесь и что мне следует использовать функцию с replace = False, но я не могу заставить ее дать мне результат.

Код: Выделить всё

import numpy as np
from collections import Counter

nameList = ['AAAAAA', 'B', 'C', 'D','E','F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q','R','S','T','U','V','W','X','ZZZZZZZZZZZZZZZZ']
probability_nameList = [0.10, 0.01, 0.02, 0.03, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04]

sampleNames =[]
sampleNamesControl =[]
cleaned_result = []
test_list = []

for i in range(1000):
sampleNames += np.random.choice(nameList, 100,replace=True, p=probability_nameList)
for item in sampleNames:
if not item in cleaned_result:
cleaned_result += [item]
sampleNames =[]
test_list += cleaned_result[0:12]
cleaned_result = []

print(Counter(test_list))

Ответ:

Код: Выделить всё

Counter({'AAAAAA': 832, 'F': 522, 'X': 513, 'ZZZZZZZZZZZZZZZZ': 506, 'I': 505, 'L': 504, 'N': 501, 'S': 499, 'T': 498, 'U': 496, 'R': 492, 'O': 491, 'J': 489, 'P': 488, 'E': 487, 'V': 485, 'K': 482, 'Q': 479, 'H': 473, 'G': 471, 'M': 468, 'W': 461, 'D': 404, 'C': 297, 'B': 157})
Как видите, AAAAA должно быть в 10 раз больше, чем B, но этого не происходит.
P(AAAAA)= 10xP(B)

Подробнее здесь: https://stackoverflow.com/questions/709 ... al-weights
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»