Source code for veloev.postprocessing.utils

import numpy as np
from sklearn.metrics import pairwise_distances

def _get_indices_distances_from_dense_matrix(D, n_neighbors: int):
    sample_range = np.arange(D.shape[0])[:, None]
    indices = np.argpartition(D, n_neighbors - 1, axis=1)[:, :n_neighbors]
    indices = indices[sample_range, np.argsort(D[sample_range, indices])]
    distances = D[sample_range, indices]
    return indices, distances

[docs] def fill_in_neighbors_indices(adata): if 'X_pca' not in adata.obsm: raise ValueError("adata.obsm must contain 'X_pca' for neighbor indices calculation.") X = adata.obsm['X_pca'] _distances = pairwise_distances(X, metric='euclidean') knn_indices, _ = _get_indices_distances_from_dense_matrix(_distances, n_neighbors=30) adata.uns["neighbors"]["indices"] = knn_indices