From 81c06cfcc0e5a857010f77c85e313a26dc3b6401 Mon Sep 17 00:00:00 2001
From: Guillaume Cerutti <guillaume.cerutti@inria.fr>
Date: Thu, 9 Nov 2023 16:36:54 +0100
Subject: [PATCH] optimizations after profiling...

---
 src/cellcomplex/property_topomesh/example_topomesh.py     | 2 +-
 src/cellcomplex/property_topomesh/utils/matching_tools.py | 5 ++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/cellcomplex/property_topomesh/example_topomesh.py b/src/cellcomplex/property_topomesh/example_topomesh.py
index f6670bf..ab475b9 100644
--- a/src/cellcomplex/property_topomesh/example_topomesh.py
+++ b/src/cellcomplex/property_topomesh/example_topomesh.py
@@ -742,7 +742,7 @@ def circle_voronoi_topomesh(size = 1,cell_size = 1.,circle_size = 100.,z_coef =
         iterations = n_cells//2
 
     for iteration in range(iterations):
-        cell_to_cell_vectors = np.array([[p-q for q in cell_points] for p in cell_points])
+        cell_to_cell_vectors = cell_points[np.newaxis] - cell_points[:, np.newaxis]
         cell_to_cell_distances = np.linalg.norm(cell_to_cell_vectors,axis=2)/radius
         cell_to_circle_vectors = np.array([[p-q for q in circle_points] for p in cell_points])
         cell_to_circle_distances = np.linalg.norm(cell_to_circle_vectors,axis=2)/radius
diff --git a/src/cellcomplex/property_topomesh/utils/matching_tools.py b/src/cellcomplex/property_topomesh/utils/matching_tools.py
index fb51323..5c1b0e0 100644
--- a/src/cellcomplex/property_topomesh/utils/matching_tools.py
+++ b/src/cellcomplex/property_topomesh/utils/matching_tools.py
@@ -26,9 +26,8 @@ def brute_force_match(obs, codebook):
     return (np.argmin(distance_matrix,axis=1),np.min(distance_matrix,axis=1))
 
 def kd_tree_match(obs, codebook, radius=1e-5):
-    data = cKDTree(obs)
-    res1 = data.query_ball_tree(cKDTree(codebook), radius, 2, radius)
-    res1 = np.array([r[np.argmin(np.linalg.norm(codebook[r] - o,axis=1))] if len(r)>0 else None for o,r in zip(obs,res1)])
+    code = cKDTree(codebook)
+    res1 = code.query(obs, k=1, distance_upper_bound=radius)[1]
     return res1
 
 def vector_quantization_match(obs, codebook):
-- 
GitLab