Мне нужна помощь, чтобы повысить производительность.
Я получил заданный объем, который представляет собой 3d-матрицу из 0 и 1, представляющую воксели. Я также получил список очков. Для каждого вокселя в объеме я хотел бы знать расстояние до ближайшей точки, содержащейся в списке. Следующий код может занять очень много времени.
Result_Distances = np.zeros((10,10,10))
Volume = np.ones((10,10,10)) # or any other 3d matrix with 1s or 0s
ListofPoints = [(2,3,2), (2,3,3) ,(2,6,4),(9,6,8)] # or other points
for index, voxel in np.ndenumerate(Volume):
if voxel == 1:
for index2 in ListofPoints:
distance = np.sqrt((index[0]-index2[0])**2+(index[1]-index2[1])**2+(index[2]-index2[2])**2)
distances.append(distance)
Result_Distances[index] = np.amin(distances)
Это займет около 1 минуты для вычисления, потому что мой объем может быть очень большим (> 1000 вокселей). Мои ListofPoints меньше (около 100 баллов).
Есть ли умный способ избежать затрат времени на петли? Я также попробовал функцию map (), но не смог реализовать ее каким-либо образом, поэтому есть улучшение.
Спасибо за помощь!