2014-10-15 6 views
1

큰 세트의 데이터 (비정형 메쉬의 점)를 참조하는 값을 갖는 두 세트의 데이터가 있습니다.파이썬을 사용하여 배열의 요소 목록을 찾는 방법

두 개의 작은 데이터 세트에는 더 큰 데이터 세트의 포인트를 참조하는 전역 ID가있는 벡터가 들어 있습니다. 같은 : 데이터

0 0 0 
0 0 1 
0 1 0 
1 0 0 
1 1 0 
1 0 1 
0 1 1 
1 1 1 

작은 세트 : 데이터

대형 세트

0 1 
3 5 
4 5 
6 7 
7 2 

B

0 10 
4 12 
7 60 

작은 첫 번째 열 데이터 세트는 큰 데이터 세트의 행 번호를 참조하십시오. 작은 데이터 세트의 두 번째 열은 예제 데이터입니다.

는 B의 첫 번째 열은 A의 첫 번째 열의 부분 집합이 항상 것도 언급 할 가치가있다

내가 필요로하는 점 ID가 B.

의 일치 (A)의 행 인덱스입니다 이 경우

이 될 것이다 :

ind = [0,2,4] 

즉 A는 [IND 0] B의 = [를 : 0]

I 이전에이를 관리해야 루프를 사용하지만 데이터 세트의 크기가 1,000 만 개 이상으로 늘어나고 루프가 너무 느립니다. 누구든지 더 빠른 방법을 제안 할 수 있습니까?

+0

뭐죠 A와 B의 종류? – Kasramvd

+1

'0,2,4'를 의미합니까? –

+0

나는 적절하게 편집 할 것이고, 당신을 감사 할 것이다. – Bensciens

답변

1

B의 첫 번째 열 데이터를 세트에 넣으면 속도가 빨라집니다. A와 B는 튜플 (또는 목록)의 목록이 있다고 가정 ,이 시도 :

>>> A 
[('0', '1'), ('3', '5'), ('4', '5'), ('6', '7'), ('7', '2')] 
>>> B 
[('0', '10'), ('4', '12'), ('7', '60')] 
>>> bkeys=set([i[0] for i in B]) 
>>> [i for i,v in enumerate(A) if v[0] in bkeys] 
[0, 2, 4] 
+0

이것은 정확하게 내가 찾고있는 것이다. 이전보다 훨씬 빨리 실행됩니다. 감사합니다. – Bensciens

관련 문제