相关疑难解决方法(0)

关于如何加快距离计算的建议

考虑以下课程:

class SquareErrorDistance(object):
    def __init__(self, dataSample):
        variance = var(list(dataSample))
        if variance == 0:
            self._norm = 1.0
        else:
            self._norm = 1.0 / (2 * variance)

    def __call__(self, u, v): # u and v are floats
        return (u - v) ** 2 * self._norm
Run Code Online (Sandbox Code Playgroud)

我用它来计算矢量的两个元素之间的距离.我基本上为使用此距离度量的向量的每个维度创建该类的一个实例(存在使用其他距离度量的维度).分析表明,__call__这个类的功能占我实现的90%的运行时间(谁会想到).我认为没有任何纯Python方法可以加快速度,但是如果我用C实现它呢?

如果我运行一个简单的C程序,只使用上面的公式计算随机值的距离,它比Python快几个数量级.所以我尝试使用ctypes并调用一个执行计算的C函数,但显然参数和返回值的转换非常昂贵,因为生成的代码要慢得多.

我当然可以在C中实现整个knn并且只是调用它,但问题是,就像我描述的那样,我对向量的某些维度使用不同的距离函数,并且将这些函数转换为C将是太多的工作.

那么我有什么选择呢?使用Python C-API编写C函数会消除开销吗?有没有其他方法可以加快计算速度?

python performance python-c-api

6
推荐指数
1
解决办法
468
查看次数

标签 统计

performance ×1

python ×1

python-c-api ×1