braintools.analysis.population.rdm#
- braintools.analysis.population.rdm(x, metric='correlation')#
Representational dissimilarity matrix between conditions.
Entry
(i, j)is the dissimilarity between the activity patterns of conditionsiandj(rows ofx) [1]:'correlation': \(1 - r(x_i, x_j)\), one minus the Pearson correlation across features;'cosine': \(1 - x_i \cdot x_j / (\lVert x_i\rVert \lVert x_j\rVert)\);'euclidean': \(\lVert x_i - x_j \rVert_2\).
- Parameters:
x (array_like or brainunit.Quantity) – Condition-by-feature patterns, shape
(C, D).metric (
str) – Dissimilarity measure (same definitions asscipy.spatial.distance.pdist).
- Returns:
Symmetric
(C, C)matrix with a zero diagonal.'euclidean'carries the unit ofx; the other metrics are dimensionless. Off-diagonal entries involving a zero-norm ('cosine') or constant ('correlation') pattern arenan, as in scipy.- Return type:
jax.Array or brainunit.Quantity
- Raises:
ValueError – If
xis not 2-D ormetricis unknown.
See also
rsaCompare two RDMs.
Notes
Equal to
scipy.spatial.distance.squareform(pdist(x, metric)). The Euclidean metric is computed from explicit differences (memoryO(C^2 D)) for accuracy. Jittable, vmappable and differentiable (the Euclidean branch has a zero subgradient at zero distance).References
Examples
>>> import jax.numpy as jnp >>> from braintools.analysis import population >>> x = jnp.array([[0., 0.], [3., 4.], [1., 0.]]) >>> population.rdm(x, metric='euclidean') Array([[0. , 5. , 1. ], [5. , 0. , 4.472136], [1. , 4.472136, 0. ]], dtype=float32)