189 votes

Cython : "erreur fatale : numpy/arrayobject.h : No such file or directory"

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).

1voto

strpeter Points 1762

Réponse simple

Une façon plus simple est d'ajouter le chemin d'accès à votre fichier distutils.cfg . Son chemin au nom de Windows 7 est par défaut C:\Python27\Lib\distutils\ . Il suffit d'affirmer le contenu suivant et cela devrait fonctionner :

[build_ext]
include_dirs= C:\Python27\Lib\site-packages\numpy\core\include

Tout le fichier de configuration

Pour vous donner un exemple de ce à quoi le fichier de configuration pourrait ressembler, mon fichier entier se lit comme suit :

[build]
compiler = mingw32

[build_ext]
include_dirs= C:\Python27\Lib\site-packages\numpy\core\include
compiler = mingw32

1voto

hsc Points 334

Il devrait être en mesure de le faire dans un délai de cythonize() fonction comme indiqué aquí mais cela ne fonctionne pas parce qu'il y a un problème de sécurité. problème connu

-1voto

Je n'avais pas les privilèges sudo sur le serveur que j'utilisais et l'exportation de CFLAGS ne fonctionnait pas avec moi. Pour des raisons de simplicité, j'ai installé Anaconda ( https://docs.anaconda.com/anaconda/install/ ) qui crée des liens vers tous ses paquets installés, y compris Numpy. Vous pouvez également installer miniconda et travailler avec des environnements pour éviter d'utiliser trop d'espace.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X