Penso que o principal problema é obter as distâncias aos pares de forma eficiente. Depois de ter que o resto é elemento sábio.
Para fazer isso, você provavelmente deseja usar o scipy. A função scipy.spatial.distance.pdist
faz o que você precisa e scipy.spatial.distance.squareform
possivelmente facilitará sua vida.
Então, se você quiser a matriz do kernel, faça
from scipy.spatial.distance import pdist, squareform
# this is an NxD matrix, where N is number of items and D its dimensionalites
X = loaddata()
pairwise_dists = squareform(pdist(X, 'euclidean'))
K = scip.exp(-pairwise_dists ** 2 / s ** 2)
A documentação pode ser encontrada aqui .