Cython : "치명적인 오류 : numpy / arrayobject.h : 해당 파일 또는 디렉토리가 없습니다"
나는 대답을 가속화하기 위해 노력하고있어 여기 사이 썬를 사용하여. 코드를 컴파일하려고 시도 했지만 ( herecygwinccompiler.py
설명 된 핵 을 수행 한 후 ) 오류가 발생합니다. 누구나 내 코드에 문제가 있거나 Cython의 난해한 미묘한 부분이 있는지 말해 줄 수 있습니까?fatal error: numpy/arrayobject.h: No such file or directory...compilation terminated
아래는 내 코드입니다. 미리 감사드립니다.
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()
당신에 setup.py
의는 Extension
인수가 있어야합니다 include_dirs=[numpy.get_include()]
.
또한 np.import_array()
코드에서 누락되었습니다 .
-
setup.py 예 :
from distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy
setup(
ext_modules=[
Extension("my_module", ["my_module.c"],
include_dirs=[numpy.get_include()]),
],
)
# Or, if you use cythonize() to make the ext_modules list,
# include_dirs can be passed to setup()
setup(
ext_modules=cythonize("my_module.pyx"),
include_dirs=[numpy.get_include()]
)
For a one-file project like yours, another alternative is to use pyximport
. You don't need to create a setup.py
... you don't need to even open a command line if you use IPython ... it's all very convenient. In your case, try running these commands in IPython or in a normal Python script:
import numpy
import pyximport
pyximport.install(setup_args={"script_args":["--compiler=mingw32"],
"include_dirs":numpy.get_include()},
reload_support=True)
import my_pyx_module
print my_pyx_module.some_function(...)
...
You may need to edit the compiler of course. This makes import and reload work the same for .pyx
files as they work for .py
files.
Source: http://wiki.cython.org/InstallingOnWindows
The error means that a numpy header file isn't being found during compilation.
Try doing export CFLAGS=-I/usr/lib/python2.7/site-packages/numpy/core/include/
, and then compiling. This is a problem with a few different packages. There's a bug filed in ArchLinux for the same issue: https://bugs.archlinux.org/task/22326
Simple answer
A way simpler way is to add the path to your file distutils.cfg
. It's path behalf of Windows 7 is by default C:\Python27\Lib\distutils\
. You just assert the following contents and it should work out:
[build_ext]
include_dirs= C:\Python27\Lib\site-packages\numpy\core\include
Entire config file
To give you an example how the config file could look like, my entire file reads:
[build]
compiler = mingw32
[build_ext]
include_dirs= C:\Python27\Lib\site-packages\numpy\core\include
compiler = mingw32
It should be able to do it within cythonize()
function as mentioned here, but it doesn't work beacuse there is a known issue
'development' 카테고리의 다른 글
svn : 특정 버전의 트렁크에서 분기를 만드는 방법 (0) | 2020.07.22 |
---|---|
비트 맵을 위젯에 동적으로 넣을 때 실패한 바인더 트랜잭션 (0) | 2020.07.22 |
Visual Studio 2013이 웹 응용 프로그램으로 변환되지 않음 (0) | 2020.07.22 |
SQL Server 버전을 확인하는 방법 (0) | 2020.07.22 |
재정의 된 설명 방법으로 개체의 메모리 주소를 NSLog (0) | 2020.07.22 |