簡體   English   中英

如何在python中向量化嵌套的for循環

[英]How to vectorize a nested for loop in python

我最關心效率。 我有很長的ID列表,還有第二個較短的ID列表。 我想在第二個列表中存儲與第一個列表中的每個ID對應的ID的位置(每個ID在每個列表中應該只出現一次)。 我已經編寫了一個嵌套的for循環來執行此操作,但是由於第一個列表包含超過1000個元素,而第二個列表包含超過80k個元素,因此下面的代碼花費了很長時間(但是可行)。

IDD1 = [0] * leng
IDD2 = [0] * leng
## Match IDs to position in table
for i in range(leng):
    for j in range(len(halo_id)):
        if ID1[i] == halo_id[j]:
            IDD1[i] = j
        if ID2[i] == halo_id[j]:
            IDD2[i] = j

如果有任何相關性,則這些ID最初來自halotools halo目錄表。

編輯:

在兩種情況下,數據實際上只是一個整數列表。 我想要的結果是一個整數列表(索引)。 ID1和ID2本質上是同一件事,我只需要以相同的方式對它們進行操作。 它們是我之前的整數列表。 halo_id相同,但更長。

首先,創建ID到位置的映射:

idmap = {i: e for (e, i) in enumerate(halod_id)}

然后遍歷較小的列表,並進行映射:

idd1 = [idmap[el] for el in id1]

這將運算從O(n * m)減少到O(n + m)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM