我正試圖在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×10^4個節點= 10^8。當然這很慢。沒有你想要做的事情的信息,運行時間和內存使用情況很難改善。 – nhahtdh
@nhahtdh:基本上,循環代表提取與每個節點相關的向量。我很感興趣的是從這兩個圖形即所有可能的這些向量對的點積,即10000 * 10000對。因此,每個節點都將與10000個這樣的點積相關聯,然後我想對它們進行排序並保存以供進一步處理。正如您正確地提到的那樣,計算時間非常巨大,內存需求也是如此,我希望通過一些文件操作或任何其他建議來優化內存需求。 –