SciPy cdist Speed Difference
Estou curioso para cdistsaber por que os itens a seguir diferem tanto no tempo, embora produzam os mesmos resultados:
import numpy as np
from scipy.spatial.distance import cdist
x = np.random.rand(10_000_000, 50)
y = np.random.rand(50)
result_1 = cdist(x, y[np.newaxis, :])
result_2 = cdist(x, y[np.newaxis, :], `minkowski`, p=2.)
O result_1é significativamente mais rápido do que result_2.
Respostas
A implementação C da distância euclidiana, linhas de origem 50-66 , usa multiplicação e uma sqrt()chamada, enquanto a distância de Minkowski, linhas de origem 381-391 é baseada nas chamadas muito mais lentas para a pow()função.
Para referência, veja a discussão aqui e aqui comparando powa multiplicação e sqrt.
Portanto, apesar da aparência de que a norma euclidiana apenas chama a norma de Minkowski, a linha de origem 614 , cdistna verdade chama diretamente para a implementação C onde o código é diferente. A euclideanfunção python não é chamada na execução real.