J'ai une fonction qui calcule une matrice pour moi mais c'est vraiment lent. Même à Cython, il tourne lentement, alors je me demandais si on pouvait faire quelque chose pour améliorer le code ci-dessous.Un moyen efficace de créer une matrice avec Cython
EDIT: J'ai changé ou ajouté
des = np.zeros([n-m+1,m])
-cdef np.ndarray des = np.zeros([n-m+1,m], dtype=DTYPE)
(C'est plus rapide que np.empty...
Au lieu de dire que je m/2
ai ajouté une cdef int m2 = m/2
mais cela n'a pas semblé aider quoi que ce soit
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
.
En général n~10000
et m=1001
ne pas oublier de vérifier la sortie de 'cython -a' pour plus de détails. Le fichier html généré est extrêmement utile pour voir les points faibles du code – dmytro
Oui, le fichier html est vraiment utile, quand on veut voir la partie lente (ou la partie qui nécessite beaucoup de conversion), mais ce n'est vraiment pas très utile si vous n'avez aucune idée de comment continuer à partir de là. Mais je suis d'accord avec toi. J'ai aussi commencé avec le fichier html. –
Il semble que vous stockiez simplement des tranches simples du tableau 's'. Vous pourriez juste trancher 's' quand vous en avez besoin? –