有一种观点认为,numpy的功能不能在cython或numba的帮助下加速。但这并不完全正确:numpy的目标是为各种场景提供出色的性能,但这也意味着在特殊场景下的性能并不完美。在
有了特定的场景,您就有机会改进numpy的性能,即使这意味着要重写numpy的一些功能。例如,在本例中,我们可以使用cython将函数加速到因子4,使用numba可以将因子8加速。在
让我们从您的版本开始作为基线(请参阅答案末尾的列表):>>>%timeit cosine(x,y) # scipy's
31.9 µs ± 1.81 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>>%timeit np_cosine(x,y) # your numpy-version
4.05 µs ± 19.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit np_cosine_fhtmitchell(x,y) # @FHTmitchell's version
4 µs ± 53.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
>>>%timeit np_cy_cosine(x,y)
2.56 µs ± 123 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
所以我看不到@FHTmitchell版本的改进,但其他方面与您的时间安排没有什么不同。在
向量只有50个元素,所以实际计算需要大约200-300