У меня есть функция, которая вычисляет матрицу для меня, но она очень медленная. Даже в cython он работает медленно, поэтому мне было интересно, можно ли что-либо сделать для улучшения кода ниже.Эффективный способ создания матрицы с помощью cython
EDIT: Я изменил или добавил
des = np.zeros([n-m+1,m])
к cdef np.ndarray des = np.zeros([n-m+1,m], dtype=DTYPE)
(Это быстрее, чем np.empty...
Вместо того чтобы сказать m/2
я добавил cdef int m2 = m/2
, но это не казалось, чтобы помочь что-нибудь
cimport numpy as np
cimport cython
DTYPE = float
ctypedef np.float_t DTYPE_t
@cython.boundscheck(False)
@cython.cdivision(True)
@cython.wraparound(False)
cpdef map4(np.ndarray[DTYPE_t, ndim=1] s, int m):
cdef int n = len(s)
cdef int i
cdef int j
des = np.zeros([n-m+1,m])
for j in xrange(m):
for i in xrange(m/2,n-m/2-1):
des[i-m/2,j] = s[i-j+m/2]
return des, s, m, n
.
Обычно n~10000
и m=1001
не забудьте проверить выходные данные 'cython -a' для деталей. Сгенерированный html-файл чрезвычайно полезен для просмотра слабых мест в коде – dmytro
Да, html-файл действительно полезен, когда вы хотите увидеть медленную часть (или часть, которая требует большого количества преобразований), но это действительно не так очень полезно, если вы не знаете, как это сделать дальше. Но я согласен с тобой. Я также начал работу с html-файлом. –
Кажется, вы просто храните простые кусочки массива 's'. Вы могли бы просто нарезать '' ', когда вам нужно? – 2013-09-19 23:45:59