मैं 300000 सूची (फाइबर पटरियों), जहां प्रत्येक ट्रैक (एक्स, वाई, जेड) tuples/की एक सूची है की एक सूची है निर्देशांक:घुसपैठ गिनने के लिए अधिक कुशल तरीका?
tracks=
[[(1,2,3),(3,2,4),...]
[(4,2,1),(5,7,3),...]
...
]
मैं भी मास्क का एक समूह है, जहां प्रत्येक मुखौटा है (एक्स, वाई, जेड) tuples/की एक सूची के रूप में परिभाषित किया गया है निर्देशांक:
mask_coords_list=
[[(1,2,3),(8,13,4),...]
[(6,2,2),(5,7,3),...]
...
]
मैं मास्क के सभी संभव जोड़े के लिए, खोजने की कोशिश कर रहा हूँ:
- पटरियों की संख्या है कि प्रत्येक एक दूसरे को काटना मास्क-मास्क जोड़ी (एक कॉन बनाने के लिए ectivity मैट्रिक्स)
- पटरियों कि प्रत्येक मुखौटा एक दूसरे को काटना, प्रत्येक (एक्स, वाई, जेड के लिए 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:
मैं वर्तमान में भाग 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
और भाग 2 इसलिए की तरह मैं एक घंटे से अधिक समय लेता हूं जब मेरे पास 70 या अधिक मास्क की सूची होती है। क्या प्रत्येक ट्रैक के लिए पुनरावृत्ति करने से ऐसा करने का एक और अधिक प्रभावी तरीका है?
सभी उत्तरों मामूली सुधार लगते हैं, लेकिन मुझे लगता है कि आपको उससे अधिक की आवश्यकता है। – McPherrinM
यदि आप किसी नमूना डेटा सेट और पेस्टबिन में सही उत्तरों को कहीं भी पोस्ट कर सकते हैं, तो आपको और सहायता मिल सकती है। –
क्या मुझे यह सही लगता है कि चौराहे केवल दो समन्वय tuples के रूप में परिभाषित किया गया है, और समन्वय के बीच की रेखाओं के रूप में नहीं है? – Svante