SciPy cdist 속도 차이

Sep 24 2020

다음 항목 cdist이 동일한 결과를 생성하더라도 시간이 많이 다른 이유가 궁금 합니다.

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.)

는 result_1빠르게보다 훨씬입니다 result_2.

답변

2 Alex Sep 24 2020 at 18:49

유클리드 거리의 C 구현 인 소스 라인 50-66 은 곱셈과 sqrt()호출을 사용하는 반면 Minkowski 거리, 소스 라인 381-391 은 훨씬 느린 pow()함수 호출을 기반으로합니다 .

참고로, 설명을 참조 여기 와 여기에 비교 pow곱셈과에 sqrt.

따라서 유클리드 표준이 Minkowski 표준을 호출하는 것처럼 보임에도 불구하고 소스 라인 614 는 cdist실제로 코드가 다른 C 구현을 직접 호출합니다 . 파이썬 euclidean함수는 실제 실행에서 호출되지 않습니다.