我有一个包含300000个列表(纤维束轨迹)的列表,其中每个轨迹是由(x,y,z)元组/坐标组成的列表:
tracks=
[[(1,2,3),(3,2,4),...]
[(4,2,1),(5,7,3),...]
...
]
我还有一个面具组,每个面具都被定义为(x,y,z)元组/坐标的列表:
mask_coords_list=
[[(1,2,3),(8,13,4),...]
[(6,2,2),(5,7,3),...]
...
]
我正在尝试为所有可能的掩模对找到以下内容:
- 相交于每个掩模-掩模对的轨道数量(以创建连通性矩阵)
- 与每个掩模相交的轨道子集,以便为子集中的每个轨道的(x,y,z)坐标加1(以创建“密度”图像)
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
并且第二部分如下:
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
使用集合来查找交集显着加快了此过程,但是当我有70个或更多掩码的列表时,这两部分仍需要超过一小时。是否有比为每个轨道迭代更有效的方法?