Я использовал функцию random_element()
, предоставленную SAGE, для генерации случайных целых разделов для заданного целого числа (N
), которые являются определенной длиной (S
). Я пытаюсь создать несмещенные случайные выборки из набора всех разделов для заданных значений N
и S
. Функция SAGE быстро возвращает случайные разделы для N (то есть Partitions(N).random_element()
).Алгоритм случайного генерации целых разделов определенной длины в Python?
Однако при добавлении S
(т. Е. Partitions(N,length=S).random_element()
) он значительно замедляется. Аналогично, отбор случайных разделов N
, имеющих длину S
, невероятно медленный.
Однако, и я надеюсь, что это поможет кому-то, я обнаружил, что в случае, когда функция возвращает разбиение N
не соответствует длине S
, что сопряженное разбиение часто длины S. То есть:
S = 10
N = 100
part = list(Partitions(N).random_element())
if len(part) != S:
SAD = list(Partition(part).conjugate())
if len(SAD) != S:
continue
Это увеличивает скорость, при которой разбиение длины S
найдено и, как представляется, производить объективные образцы (я рассмотрел результаты против целых наборов разделов для различных значений N
и S
).
Однако я использую значения N (например, 10,000
) и S (например, 300
), которые делают этот подход непрактично медленным. Комментарий, связанный с функцией SAGE random_element()
, допускает, что существует множество возможностей для оптимизации. Итак, есть ли способ быстрее генерировать несмещенные (то есть случайные равномерные) выборки целых разделов, соответствующие заданным значениям N
и S
, возможно, не генерируя разделы, которые не соответствуют S
? Кроме того, использование сопряженных разделов во многих случаях хорошо работает для создания несмещенных образцов, но я не могу сказать, что я точно понимаю, почему.
Спасибо за ответ, но я не вижу, как эта функция дает разделы, основанные на равномерной случайной выборке. – klocey
@klocey, я пропустил тот факт, что вы генерируете случайные элементы из последовательности, извините. –
Я реализовал эту функцию и сравнил произвольные сэмплы, сгенерированные ею, с полными наборами разделов для нескольких комбинаций N и S. Сравнения были сделаны с использованием кривых плотности ядра, порожденных дисперсиями разделов. Как и любая другая стратегия выборки, которую я пробовал, эта функция дает необъективные выборки (разделы с более низкой, чем ожидалось, дисперсией). По-видимому, просто сложно создать несмещенную случайную выборку из набора всех разделов для заданного полного N и длины S. Функция SAGE является ближайшей, я пришел, но она далека от оптимальной. – klocey