Skip to content

Commit db7db9c

Browse files
committed
Implement kernel with equal weight for all neighbors
1 parent b95cae7 commit db7db9c

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/cellmapper/cellmapper.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ def compute_neighbors(
244244

245245
def compute_mappping_matrix(
246246
self,
247-
method: Literal["jaccard", "gaussian", "scarches", "inverse_distance", "random", "hnoca"] = "gaussian",
247+
method: Literal["jaccard", "gaussian", "scarches", "inverse_distance", "random", "hnoca", "equal"] = "gaussian",
248248
) -> None:
249249
"""
250250
Compute the mapping matrix for label transfer.
@@ -255,11 +255,12 @@ def compute_mappping_matrix(
255255
Method to use for computing the mapping matrix. Options include:
256256
257257
- "jaccard": Jaccard similarity. Inspired by GLUE :cite:`cao2022multi`
258-
- "gaussian": Gaussian kernel with adaptive bandwidth. Loosely inspired by MAGIC :cite:`van2018recovering`
258+
- "gaussian": Gaussian kernel with (global) bandwith equal to the mean distance.
259259
- "scarches": scArches kernel. Inspired by scArches :cite:`lotfollahi2022mapping`
260260
- "inverse_distance": Inverse distance kernel.
261261
- "random": Random kernel, useful for testing.
262262
- "hnoca": HNOCA kernel. Inspired by HNOCA-tools :cite:`he2024integrated`
263+
- "equal": All neighbors are equally weighted (1/n_neighbors).
263264
264265
Returns
265266
-------
@@ -290,7 +291,7 @@ def compute_mappping_matrix(
290291
jaccard.data /= 2 * n_neighbors - jaccard.data
291292
jaccard.data = jaccard.data**2
292293
self.mapping_matrix = jaccard
293-
elif method in ["gaussian", "scarches", "inverse_distance", "random"]:
294+
elif method in ["gaussian", "scarches", "inverse_distance", "random", "equal"]:
294295
self.mapping_matrix = self.knn.yx.knn_graph_connectivities(kernel=method)
295296
else:
296297
raise NotImplementedError(f"Method '{method}' is not implemented.")

src/cellmapper/knn.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ def _compute_kernel_values(
199199
# Apply Gaussian kernel to valid entries
200200
connectivities[valid_mask] = np.exp(-(finite_distances**2) / (2 * sigma**2))
201201

202+
elif kernel == "equal":
203+
# Set connectivities to 1 for valid entries
204+
connectivities[valid_mask] = 1.0
205+
202206
elif kernel == "scarches":
203207
# Calculate sigma using only finite distances
204208
sigma = np.std(finite_distances)
@@ -218,7 +222,7 @@ def _compute_kernel_values(
218222

219223
else:
220224
raise ValueError(
221-
f"Unknown kernel: {kernel}. Supported kernels are: 'gaussian', 'scarches', 'random', 'inverse_distance'."
225+
f"Unknown kernel: {kernel}. Supported kernels are: 'gaussian', 'scarches', 'random', 'inverse_distance', 'equal'."
222226
)
223227

224228
return connectivities

0 commit comments

Comments
 (0)