난 각 트랙 (X, Y, Z) 튜플/목록이다 300,000 목록 (섬유 트랙)의 목록을하는 좌표더 효율적인 교차로 수 계산 방법은 무엇입니까?
tracks=
[[(1,2,3),(3,2,4),...]
[(4,2,1),(5,7,3),...]
...
]
I 또한, 여기서 각각의 마스크가 마스크의 그룹 (X, Y, Z) 튜플/목록으로 정의되는 좌표
mask_coords_list=
[[(1,2,3),(8,13,4),...]
[(6,2,2),(5,7,3),...]
...
]
I 마스크의 모든 가능한 쌍에 대한 찾기 위해 시도하고있다 :
- 서로 교차하는 트랙의 개수 마스크 - 마스크 쌍 (conn ectivity 행렬) 각각의 (X, Y, Z에 1을 추가하기 위해, 각각의 마스크를 교차 트랙
- 서브 세트)은 "밀도"이미지를 생성하기 위해 (서브 세트 트랙마다 좌표)
def mask_tracks(tracks,masks,masks_coords_list):
vox_tracks_img=zeros((xdim,ydim,zdim,len(masks)))
for track in tracks:
for count,mask in enumerate(masks_coords_list):
if any(set(track) & set(mask)):
for x,y,z in track:
vox_tracks_img[x,y,z,count] += 1
교차점을 찾기 위해 세트를 사용하여이 질주하고있다이 과정을하지만 두 부분 STIL :과 같이
def mask_connectivity_matrix(tracks,masks,masks_coords_list):
connect_mat=zeros((len(masks),len(masks)))
for track in tracks:
cur=[]
for count,mask_coords in enumerate(masks_coords_list):
if any(set(track) & set(mask_coords)):
cur.append(count)
for x,y in list(itertools.combinations(cur,2)):
connect_mat[x,y] += 1
와 2 부 :
나는 현재과 같이 1 부하고 있어요 내가 70 개 이상의 가면 목록을 가지고있을 때 한 시간 이상 걸릴거야. 각 트랙을 반복하는 것보다 더 효율적인 방법이 있습니까?
모든 답변은 약간 개선 된 것으로 보이지만 그 이상의 것이 필요하다고 생각합니다. – McPherrinM
샘플 데이터 세트와 정답을 어딘가에 pastebin에 게시 할 수 있다면 도움을받을 수 있습니다. –
교차가 교차하는 두 줄의 좌표 튜플 만 정의되고 좌표 사이의 줄은 교차하지 않는다는 것을 알 수 있습니까? – Svante