저는 효율성과 관련이 있습니다. ID 목록이 매우 길고 두 번째로 짧은 ID 목록이 있습니다. 첫 번째 목록의 각 ID에 해당하는 두 번째 목록의 ID 위치를 저장하려고합니다 (각 ID는 각 목록에 한 번만 나타납니다). 나는 이렇게하기 위해 중첩 된 for 루프를 작성했지만 첫 번째 목록에는 1000 개가 넘는 요소가 있고 두 번째 목록에는 80k 개 이상의 요소가 들어 있으므로 아래 코드는 매우 오래 걸린다.파이썬에서 중첩 된 for 루프를 벡터화하는 방법
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는 동일하지만 훨씬 더 길다.
NumPy를 사용하고 있습니까? 벡터화에 대한 언급은 NumPy를 사용하는 것처럼 들리지만 실제로 NumPy 나 NumPy 데이터 구조에 대해서는 언급하지 않았습니다. – user2357112
'ID1 [i]'는'halo_id [j]'와'ID1' (그리고'ID2')가 어떻게'0'의 목록일까요? 그러나 역순 사전으로'halo_id'를 넣기 만하면됩니다. – AChampion
어쩌면 20 개의 요소가있는 예제 데이터와 원하는 출력을 던질 수 있습니까? –