2013-07-26 5 views
1
help(random.sample) 

говорит «Результирующий список находится в выбора порядка так, что все суб-ломтики будут также действительны случайные образцы»random.sample и «порядок выбора»

Что заказ выбор означает? Если бы не было требования для отборной заявки, как бы выглядел результирующий список? Как суб-срез не может быть действительной случайной выборкой?

Обновление Насколько я понял, это означает, что результаты не будут отсортированы каким-либо образом.

ответ

2

random.sample(population, k)

Учитывая population последовательность возвращает список длины k с элементами выбранных (или выбранных) от population. Заказ на выбор относится к заказу, в котором каждый из элементов выбран (случайным). Таким образом, список не сортируется по индексам в популяции, а по тому, как был сделан выбор. Таким образом, любая подгруппа возвращенного списка также является случайной выборкой для населения.

Пример -

>>> import random 
>>> population=[1,2,3,4,5,6,7,8,9,10,11,12,] 
>>> ls=random.sample(population,5) 
>>> ls 
[1, 11, 7, 12, 6] 

Возвращаемый список содержит элементы в том порядке, они были выбраны. Таким образом, вы можете использовать суб-нарезку на ls и не потерять хаотичность

>>> ls[:3] 
[1, 11, 7] 

При заказе выбора не было приведено в исполнение, вы могли бы ls выглядеть

[1,6,7,11,12] 

Суб срезами бы тогда не быть совершенно случайным но ограничивается длиной среза. Например. Наибольшее значение не может иметься в субрезке длины 3 (в этом случае это будет [1, 6, 7])

+0

«В порядке выбора» означает «не отсортировано»? –

+0

'range (1, 13)' выглядит лучше btw –

+0

@ user1307996 yup "в порядке выбора" означает "в том порядке, в котором они были выбраны" - значит, вы могли бы выбрать 12, затем 5, затем 1 и так далее, чтобы сделать ваш список. Вы произвольно выбираете их и добавляете в список возврата – RedBaron

2

Полная помощь строка:

образца (само население, к) метод random.random экземпляра Выбирается K уникальные случайные элементы последовательности населения.

Возвращает новый список, содержащий элементы из популяции, в то время как оставляет исходное население без изменений. Полученный список равен в порядке выбора, чтобы все подрезки также были действительными случайными образцов. Это позволяет победителям розыгрыша (образец) разбиваться на на главный приз и победители второго места (подклассы).

Члены населения не должны быть хешируемыми или уникальными. Если популяция содержит повторы, то каждое вхождение является возможным выбором в выборке.

Чтобы выбрать образец в диапазоне целых чисел, используйте аргумент xrange в качестве аргумента. Это особенно быстро и эффективно пространство для отбора проб из большой популяции: образец (xrange (10000000), 60)

Так беря пример лотереи; все билеты, катящиеся внутри барабана, равны population, а k - количество набранных билетов. Набор всех набранных билетов является результатом случайного sample.

sample не сортируется и не изменяется каким-либо образом, он находится в порядке его нарисования. Если вы воображаете, что вы пошли на лотерею, и они сначала набрали 100 билетов, а затем отбросили их, а затем начали рисовать реальные билеты, набор выигрышных билетов по-прежнему был бы случайным samplepopulation. Это эквивалентно принятию срезов первого большего размера sample.

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

Чтобы ответить на ваши вопросы;

порядок выбора - это просто порядок, в котором значения нарисованы, чтобы составить образец.

без обеспечения порядка отбора образец может быть отсортирован как-то.

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

def sample(population, k): 
    sample = [] 
    popsize = len(population)-1 
    while len(sample) <= k: 
     r = population[random.randint(0, popsize] 
     if r not in sample: 
      sample.append(r) 

    return sample 
+0

«без указания порядка выбора образец может быть отсортирован каким-то образом». random.sample может возвращать отсортированный seq, вы не можете его заставить. 'random.sample ([1], 1)' –

+0

Как и в случае, если вам не требуется, чтобы образец имел порядок выбора, тогда вам нечего прекращать его сортировку. – will