我已经在 python 中启动了一个项目,该项目主要由循环组成。几天前,我读到了 cython,它可以帮助您通过静态类型获得更快的代码。我开发了这两个函数来检查性能(一个在 python 中,另一个在 cython 中):
import numpy as np
from time import clock
size = 11
board = np.random.randint(2, size=(size, size))
def py_playout(board, N):
black_rave = []
white_rave = []
for i in range(N):
for x in range(board.shape[0]):
for y in range(board.shape[1]):
if board[(x,y)] == 0:
black_rave.append((x,y))
else:
white_rave.append((x,y))
return black_rave, white_rave
cdef cy_playout(board, int N):
cdef list white_rave = [], black_rave = []
cdef int M = board.shape[0], L = board.shape[1]
cdef int i=0, x=0, y=0
for i in range(N):
for x in range(M):
for y in range(L):
if board[(x,y)] == 0:
black_rave.append((x,y))
else:
white_rave.append((x,y))
return black_rave, white_rave
毕竟我使用下面的代码来测试性能:
t1 = clock()
a = playout(board, 1000)
t2 = clock()
b = playout1(board, 1000)
t3 = clock()
py = t2 - t1
cy = t3 - t2
print('cy is %a times better than py'% str(py / cy))
但是我没有发现任何明显的改进。我还没有使用 Typed-Memoryviews。任何人都可以提出有用的解决方案来提高速度或帮助我使用 typed-memoryview 重写代码吗?