Source code for ewoksfluo.math.grid_utils
from typing import Sequence, Tuple
import numpy
from sklearn.neighbors import NearestNeighbors
[docs]
def expanded_grid_coordinates(grid_axes: Sequence[numpy.ndarray]) -> numpy.ndarray:
"""
Expand grid axes to coordinates of grid nodes.
:param grid_axes: `nDim` arrays with shape `(N0,)`, `(N1,)`, ...
:returns: shape `(N0*N1*... , Ndim)`
"""
grid_coords = numpy.meshgrid(*grid_axes, indexing="ij")
return numpy.vstack([g.ravel() for g in grid_coords]).T
[docs]
def closest_point(
coordinates1: numpy.ndarray, coordinates2: numpy.ndarray
) -> Tuple[numpy.ndarray, numpy.ndarray]:
"""
Find the closest points in `coordinates1` for each point in `coordinates2`.
:param coordinates1: Coordinates with shape `(N1, Ndim)`
:param coordinates2: Coordinates with shape `(N2, Ndim)`
:returns: A tuple containing:
- indices of the closest points in `coordinates2` for each point in `coordinates1` with shape `(N1,)`
- distances to the closest points with shape `(N1,)`
"""
nbrs = NearestNeighbors(n_neighbors=1, algorithm="kd_tree")
nbrs.fit(coordinates2)
distances, indices = nbrs.kneighbors(coordinates1)
return indices.flatten(), distances.flatten()