Python:更快的内核求值函数



我有一个函数,下面计算实例x和y之间的内核:

def my_hik(x, y):
     """Histogram-Intersection-Kernel """
     summe = 0
     for i in xrange(len(x)):
         summe += min(x[i],y[i])
     return summe
     #return np.sum(np.min(np.array([[x],[y]]),0))
metrics.pairwise.pairwise_kernels(instances, metric=my_hik, n_jobs=-1)

我用skleartspairwise_kernel -function来称呼它。但是我的数据(大约3000个具有100个属性的实例)似乎太大了,一个矩阵的计算需要几分钟(因为函数被称为9*10^6次)。有没有办法让函数运行得更快?

def fast_hik(x, y):
    return np.minimum(x, y).sum()

时间:

>>> x = np.random.randn(100)
>>> y = np.random.randn(100)
>>> %timeit my_hik(x, y)
10000 loops, best of 3: 50.3 µs per loop
>>> %timeit fast_hik(x, y)
100000 loops, best of 3: 5.55 µs per loop

对于更长的向量获得更大的加速:

>>> x = np.random.randn(1000)
>>> y = np.random.randn(1000)
>>> %timeit my_hik(x, y)
1000 loops, best of 3: 498 µs per loop
>>> %timeit fast_hik(x, y)
100000 loops, best of 3: 7.92 µs per loop

相关内容

  • 没有找到相关文章

最新更新