小编Ond*_*ian的帖子

Cython并行循环问题

我使用 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 的初始解决方案

我在 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)

python performance openmp cython

5
推荐指数
1
解决办法
3876
查看次数

标签 统计

cython ×1

openmp ×1

performance ×1

python ×1