Я ищу, чтобы узнать вероятность комбинации параметров с помощью моделирования Монте-Карло. У меня есть 4 параметра, и каждый может иметь около 250 значений. Я случайно генерировал 250 000 сценариев для каждого из этих параметров, используя некоторую функцию распределения вероятности. Теперь я хочу узнать, какие комбинации параметров наиболее вероятны. Для этого я начал с фильтрации любых дубликатов из моих 250 000 случайно сгенерированных выборок, чтобы уменьшить длину списка. Затем я повторил этот сокращенный список и проверил, сколько раз каждый сценарий возникает в первоначальном 250 000 длинном списке.Быстрая сортировка больших вложенных списков
У меня есть большой список 250000 пунктов, который содержит списки, как таковые:
a = [[1,2,5,8],[1,2,5,8],[3,4,5,6],[3,4,5,7],....,[3,4,5,7]]# len(a) is equal to 250,000
Я хочу найти быстрый и эффективный способ иметь каждый список в моем списке только однократный.
Конечная цель - подсчет вхождения каждого списка в список a.
до сих пор я получил:
'''Removing duplicates from list a and storing this as a new list temp'''
b_set = set(tuple(x) for x in a)
temp = [ list(x) for x in b_set ]
temp.sort(key = lambda x: a.index(x))
''' I then iterate through each of my possible lists (i.e. temp) and count how many times they occur in a'''
most_likely_dict = {}
for scenario in temp:
freq = list(scenario_list).count(scenario)
most_likely_dict[str(scenario)] = freq
на данный момент она занимает хорошие 15 минут, чтобы выполнить ... Любое предложение о том, как превратить это в несколько секунд, было бы весьма признателен !!
Какова реальная проблема, которую вы пытаетесь решить с этим? Вероятно, если вам нужно два повторного сортировки списка каждый раз, когда вы делаете что-то не оптимальное. Не могли бы вы предоставить какой-то контекст? – jonrsharpe
Я добавил немного контекста в начале вопроса. Я в основном хочу знать, сколько раз каждый список в большом списке происходит. Каждый вложенный список представляет собой возможную комбинацию параметров для моей проблемы и вместо того, чтобы моделировать все возможные комбинации, я хочу сосредоточиться на 4 наиболее вероятных. – Sorade
Почему бы вам просто не сделать ['Counter (map (tuple, a))'] (https://docs.python.org/2/library/collections.html#collections.Counter)? Это даст вам, например. '{(1, 2, 5, 8): 2, ...}', без необходимости сортировки. – jonrsharpe