小阵列上的numpy sum性能

时间:2017-05-07 09:22:39

标签: python numpy

我的代码可以使用一些加速 - 不幸的是瓶颈似乎已经在numpy代码中。令我惊讶的是np.sum函数而不是我的对数在大部分时间都消耗了。

这是一个玩具示例:

import numpy as np
from scipy.special import xlogy

p = np.random.rand(20,4)

def many_foo(p):
    for i in range(100000):
        foo(p)

def foo(p):
    p_bar = xlogy(p, p)
    p_sum = p_bar.sum()
    p_sum = np.sum(p_bar)

kern_prof(%lprun -f foo many_foo(p))给出以下行分析:

Timer unit: 1e-06 s

Total time: 1.43734 s
File: <ipython-input-63-8f7d1e3cad35>
Function: foo at line 10

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    10                                           def foo(p):
    11    100000       259856      2.6     18.1      p_bar = xlogy(p, p)
    12    100000       404256      4.0     28.1      p_sum = p_bar.sum()
    13    100000       773232      7.7     53.8      p_sum = np.sum(p_bar)

结果让我感到惊讶。 p_bar.sum()超出竞争对手np.sum(p_bar) 2倍可能会暗示打出调用开销问题。

但为什么计算对数与总和相比如此之快?如果没有切换到c ++,有没有希望更快地获得这个?

请注意,p的小尺寸代表了我必须解决的问题。

0 个答案:

没有答案