我有一些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
提前致谢!
答案 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而异。