如何使用 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 而异。
我有一些 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 而异。