如何使用cython优化此python代码?

时间:2015-02-20 23:08:42

标签: python optimization cython

我有一些python代码,我想知道如何使用Cython优化创建数组的速度。请注意,我尝试过其他方法:Counting Algorithm Performance Optimization in Pypy vs Python (Numpy vs List)

看起来Cython的速度明显快于我之前尝试过的任何东西。我想知道我是否能获得更多的表现。

#!/usr/bin/env python
def create_array(size=4):
    """
    Creates a multi-dimensional array from size
    """
    array = [(x, y, z)
             for x in xrange(size)
             for y in xrange(size)
             for z in xrange(size)]
    return array

提前致谢!

1 个答案:

答案 0 :(得分:1)

我对cython - 代码没有帮助,但我相信这个操作仍然可以在numpy中有效地完成,你还没有看得太深。

def variations_with_repetition(alphabetlen):
    """Return a list of all possible sets of len=3 with elements
    chosen from range(alphabetlen)."""

    a = np.arange(alphabetlen)
    z = np.vstack((
        np.repeat(a,alphabetlen**2),
        np.tile(np.repeat(a,alphabetlen),alphabetlen),
        np.tile(a,alphabetlen**2))).T
    return z

现在,在这种情况下,这里的执行速度毫无意义,因为您只需要提及alphabetlen=32以下的2ms。这取决于你的CPU。但我可以比较你自己提出的方法:

In [4]: %timeit array = [(x, y, z) for x in xrange(size) for y in xrange(size) for z in xrange(size)]
100 loops, best of 3: 3.3 ms per loop

In [5]: %timeit variations_with_repetition(32)
1000 loops, best of 3: 348 µs per loop

这远低于你想要的2ms速度。但是,您的里程可能会因CPU而异。