Ich habe ein Projekt in Python gestartet, das meist aus Loops besteht. Vor ein paar Tagen habe ich über Cython gelesen, das Ihnen hilft, schneller Code durch statische Eingabe zu bekommen. entwickelte ich diese beiden Funktionen, um die Leistung zu überprüfen (ein in Python ist und die andere in cython):Wie wird die Geschwindigkeit in Schleifen in Cython verbessert?
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
ich den Code verwendet, nachdem die gleiche Performance zu testen:
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))
ich jedoch habe keine spürbaren Verbesserungen gefunden. Ich habe noch nicht Typed-Memoryviews verwendet. Kann jemand eine nützliche Lösung vorschlagen, um die Geschwindigkeit zu verbessern oder mir helfen, den Code mit typed-memoryview neu zu schreiben?
Um von Schwierigkeiten und vielleicht Leistung, 'numpy.vectorize' https://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html, 'numba.jit' http://numba.pydata.org/numba-doc/0.15.1/examples.html , "x86 intrinsics" https://software.intel.com/de-de/articles/thread-parallelism-in-cython – 16num