J'essaie d'accélérer la réponse aquí en utilisant Cython. J'essaie de compiler le code (après avoir fait le cygwinccompiler.py
Le piratage expliqué aquí ), mais obtenez un fatal error: numpy/arrayobject.h: No such file or directory...compilation terminated
erreur. Quelqu'un peut-il me dire si c'est un problème avec mon code, ou une subtilité ésotérique de Cython ?
Voici mon code.
import numpy as np
import scipy as sp
cimport numpy as np
cimport cython
cdef inline np.ndarray[np.int, ndim=1] fbincount(np.ndarray[np.int_t, ndim=1] x):
cdef int m = np.amax(x)+1
cdef int n = x.size
cdef unsigned int i
cdef np.ndarray[np.int_t, ndim=1] c = np.zeros(m, dtype=np.int)
for i in xrange(n):
c[<unsigned int>x[i]] += 1
return c
cdef packed struct Point:
np.float64_t f0, f1
@cython.boundscheck(False)
def sparsemaker(np.ndarray[np.float_t, ndim=2] X not None,
np.ndarray[np.float_t, ndim=2] Y not None,
np.ndarray[np.float_t, ndim=2] Z not None):
cdef np.ndarray[np.float64_t, ndim=1] counts, factor
cdef np.ndarray[np.int_t, ndim=1] row, col, repeats
cdef np.ndarray[Point] indices
cdef int x_, y_
_, row = np.unique(X, return_inverse=True); x_ = _.size
_, col = np.unique(Y, return_inverse=True); y_ = _.size
indices = np.rec.fromarrays([row,col])
_, repeats = np.unique(indices, return_inverse=True)
counts = 1. / fbincount(repeats)
Z.flat *= counts.take(repeats)
return sp.sparse.csr_matrix((Z.flat,(row,col)), shape=(x_, y_)).toarray()
0 votes
Pouvez-vous ajouter une balise pour indiquer le système d'exploitation que vous utilisez ?
0 votes
@tcaswell Windows 7 64-bit.
0 votes
J'ai ajouté le tag Windows, en espérant que cela aidera ce problème à être vu par les personnes qui savent utiliser Windows (contrairement à moi).
1 votes
J'ai trouvé ce . Certains termes me dépassent, mais je vais vérifier.
0 votes
Cela répond-il à votre question ? Faire en sorte que distutils recherche les fichiers d'en-tête numpy au bon endroit