我使用 cython 使用自定义指标来计算成对距离矩阵,作为scipy.spatial.distance.pdist的更快替代方案。
我的指标具有以下形式
def mymetric(u,v,w):
np.sum(w * (1 - np.abs(np.abs(u - v) / np.pi - 1))**2)
Run Code Online (Sandbox Code Playgroud)
使用 scipy 的成对距离可以计算为
x = sp.spatial.distance.pdist(r, metric=lambda u, v: mymetric(u, v, w))
Run Code Online (Sandbox Code Playgroud)
这里,r是维度为 的m向量n矩阵,是维度为 的“权重”因子。mnwn
由于我的问题m相当高,计算速度非常慢。m = 2000这大约n = 10需要 20 秒。
我在 cython 中实现了一个简单的函数来计算成对距离,并立即得到了非常有希望的结果——加速超过 500 倍。
import numpy as np
cimport numpy as np
import cython
from libc.math cimport fabs, M_PI …Run Code Online (Sandbox Code Playgroud)