Я думаю, что главная проблема состоит в том, чтобы получить попарные расстояния эффективно. Если у вас есть это, все остальное стихийно.
Для этого вы, вероятно, хотите использовать scipy. Функция scipy.spatial.distance.pdist
делает то, что вам нужно, и scipy.spatial.distance.squareform
, возможно, облегчит вашу жизнь.
Так что если вы хотите матрицу ядра, вы делаете
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)
Документацию можно найти здесь .