Optimización del cálculo de la distancia de Python al tiempo que se tienen en cuenta las condiciones de contorno periódicas

He escrito una secuencia de comandos de Python para calcular la distancia entre dos puntos en el espacio 3D y tener en cuenta las condiciones de contorno periódicas. El problema es que necesito hacer este cálculo para muchos, muchos puntos y el cálculo es bastante lento. Aquí está mi función.

def PBCdist(coord1,coord2,UC):
    dx = coord1[0] - coord2[0]
    if (abs(dx) > UC[0]*0.5):
       dx = UC[0] - dx
    dy = coord1[1] - coord2[1]
    if (abs(dy) > UC[1]*0.5):
       dy = UC[1] - dy
    dz = coord1[2] - coord2[2]
    if (abs(dz) > UC[2]*0.5):
       dz = UC[2] - dz
    dist = np.sqrt(dx**2 + dy**2 + dz**2)
    return dist

Entonces llamo a la función como tal

for i, coord2 in enumerate(coordlist):
  if (PBCdist(coord1,coord2,UC) < radius):
      do something with i

Recientemente leí que puedo aumentar mucho el rendimiento utilizando la comprensión de lista. Lo siguiente funciona para el caso no PBC, pero no para el caso PBC

coord_indices = [i for i, y in enumerate([np.sqrt(np.sum((coord2-coord1)**2)) for coord2 in coordlist]) if y < radius]
for i in coord_indices:
   do something

¿Hay alguna manera de hacer el equivalente de esto para el caso de PBC? ¿Hay alguna alternativa que funcione mejor?

Respuestas a la pregunta(4)

Su respuesta a la pregunta