결과가 P [i, j] = f (v [i], v [ j]). 나는 단순히 그것을 할 수 있다는 사실을 알고 :두 개의 벡터에 대한 함수를 브로드 캐스팅하여 두 번째 numpy 배열을 얻는다.
P = zeros((v.shape[0], v.shape[0]))
for i in range(P.shape[0]):
for j in range(P.shape[0]):
P[i, j] = f(v[i,:], v[j,:])
이상 해키 :
from scipy.spatial.distance import cdist
P = cdist(v, v, metric=f)
하지만 내가 할 수있는 가장 빠르고 산뜻한 방법을 찾고 있어요. 이것은 numpy가 내장해야하는 방송 기능처럼 보입니다. 제안 사항이 있으십니까?
작동하는 경우,'cdist'는이를 수행하는 꽤 깨끗한 방법처럼 보입니다. 호출 가능한'metric'의 경우,'cdist'는 코드가하는 일을 정확하게 수행합니다. – hpaulj
그래서'f (a, b)'는 2 개의 1 차원 배열을 취하고 스칼라를 반환합니까? – hpaulj
'f1 = functools.partial (cdist, metric = f)'는'cdist' 사용법을 숨 깁니다. – hpaulj