Я пытаюсь выполнить следующую логическую операцию в Python, но получаю проблемы с памятью и временем. Поскольку, я очень новичок в python, руководство по тому, как и где оптимизировать проблему, будет оценено! (Я понимаю, что следующий вопрос несколько абстрактный)Как оптимизировать использование памяти и времени для следующего алгоритма в python
import networkx as nx
dic_score = {}
G = nx.watts_strogatz_graph(10000,10,.01) # Generate 2 graphs with 10,000 nodes using Networkx
H = nx.watts_strogatz_graph(10000,10,.01)
for Gnodes in G.nodes()
for Hnodes in H.nodes() # i.e. For all the pair of nodes in both the graphs
score = SomeOperation on (Gnodes,Hnodes) # Calculate a metric
dic_score.setdefault(Gnodes,[]).append([Hnodes, score, -1 ]) # Store the metric in the form a Key: value, where value become a list of lists, pair in a dictionary
Тогда Сортировка списков в сгенерированном словаре в соответствии с критерием, упомянутой здесь sorting_criterion
Мои проблемы/вопросы:
1) Есть ли лучший способ приблизиться к этому, чем использовать циклы for для итерации?
2) Какой должен быть самый оптимизированный (самый быстрый) способ приближения к вышеупомянутой проблеме? Должен ли я использовать другую структуру данных, чем словарь? или, возможно, файловые операции?
3) Поскольку мне нужно сортировать списки внутри этого словаря, который имеет 10 000 ключей, каждый из которых соответствует списку из 10 000 значений, требования к памяти становятся огромными довольно быстро, и у меня заканчивается.
3) Есть ли способ интегрировать процесс сортировки при вычислении самого словаря, т. Е. Избегать выполнения отдельного цикла для сортировки?
Любые входы будут оценены! Благодаря !
10^4 x 10^4 узла = 10^8. Конечно, это медленно. Без информации о том, что вы пытаетесь сделать, время работы и использование памяти трудно улучшить. – nhahtdh
@nhahtdh: В принципе, циклы означают выделение вектора, связанного с каждым узлом. Мне интересно сказать точечный продукт всех возможных пар этих векторов из обоих графиков, то есть 10000 * 10000 пар. Поэтому каждый узел будет ассоциироваться с 10000 таких точечных продуктов, которые затем я хочу отсортировать и сохранить для дальнейшего процесса. Как вы правильно упоминали, вычислительное время огромно, а также требования к памяти, которые я хочу оптимизировать, возможно, с помощью какой-либо операции с файлами или любых других, которые могут возникнуть у вас. –