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

How do I optimize this python code using 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

提前致谢!

我不会帮助 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 的执行速度低于 2 毫秒。这取决于您的 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

这远低于您期望的 2 毫秒速度。但是再一次,您的里程可能会因 CPU 而异。