I tienen una lista de 300000 listas (pistas de fibra), donde cada pista es una lista de tuplas (x, y, z)/coordenadas:¿Forma más eficiente de contar intersecciones?
tracks=
[[(1,2,3),(3,2,4),...]
[(4,2,1),(5,7,3),...]
...
]
también tengo un grupo de máscaras, donde cada máscara se define como una lista de (, y, z x) tuplas/coordenadas:
mask_coords_list=
[[(1,2,3),(8,13,4),...]
[(6,2,2),(5,7,3),...]
...
]
estoy tratando de encontrar, para todos los posibles pares de máscaras:
- el número de pistas que se cruzan entre par máscara-máscara (para crear una conexión matriz ectividad)
- el subconjunto de pistas que se cruzan cada máscara, con el fin de añadir 1 a cada (x, y, z) de coordenadas para cada pista en el subconjunto (para crear una imagen "densidad")
Actualmente estoy haciendo la parte 1 de esta manera:
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
y la parte 2 de esta manera:
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
Usando conjuntos para encontrar las intersecciones se ha acelerado este proceso de manera significativa, pero ambas partes Stil Tomo más de una hora cuando tengo una lista de 70 o más máscaras. ¿Hay una manera más eficiente de hacer esto que iterando para cada pista?
Todas las respuestas parecen ser mejoras marginales, pero creo que se necesita más que eso. – McPherrinM
Si pudiera publicar un conjunto de datos de muestra y las respuestas correctas en algún lugar, podría obtener más ayuda. –
¿Veo bien que las intersecciones solo se definen como dos tuplas de coordenadas que son las mismas, y no como líneas entre las coordenadas que se cruzan? – Svante