Spaces:
Configuration error
Configuration error
| import numpy as np | |
| from fastdist2 import euclidean_vector_to_matrix_distance | |
| def furthest_neighbours(x, downsample_size, seed): | |
| x = x.astype(np.float32) | |
| np.random.seed(seed) | |
| length = x.shape[0] | |
| img_vecs_dims = x.shape[-1] | |
| rv_indices = [np.random.randint(low=0, high=downsample_size - 1, size=1)[0]] | |
| selected_points = np.zeros((downsample_size, img_vecs_dims), np.float32) | |
| selected_points[0, :] = x[rv_indices[0], :] | |
| distance_for_selected_min = np.ones((length,)) * 1e15 | |
| inactive_points = np.zeros(length, dtype=bool) | |
| inactive_points[rv_indices[0]] = True | |
| for i in (range(downsample_size - 1)): | |
| distance_for_selected = euclidean_vector_to_matrix_distance(selected_points[i, :], x) | |
| distance_for_selected_min = np.minimum(distance_for_selected_min, distance_for_selected) | |
| furthest_point_idx = np.argmax(np.ma.array(distance_for_selected_min, mask=inactive_points)) | |
| rv_indices.append(furthest_point_idx) | |
| selected_points[i + 1, :] = x[furthest_point_idx, :] | |
| inactive_points[furthest_point_idx] = True | |
| return rv_indices, selected_points | |