168

ここでは、Cython を使用して回答を高速化しようとしています。コードをコンパイルしようとしましたが (ここでcygwinccompiler.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()
4

8 に答える 8

50

あなたのような 1 ファイルのプロジェクトの場合、別の方法としてpyximport. を作成する必要はありsetup.pyません... IPython を使用する場合は、コマンド ラインを開く必要さえありません ... とても便利です。あなたの場合、IPython または通常の Python スクリプトでこれらのコマンドを実行してみてください。

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

もちろん、コンパイラを編集する必要があるかもしれません。これにより、インポートとリロードが.pyxファイルに対して機能するのと同じように機能し.pyます。

ソース: http://wiki.cython.org/InstallingOnWindows

于 2013-02-03T23:24:34.870 に答える
16

このエラーは、コンパイル中に numpy ヘッダー ファイルが見つからないことを意味します。

export CFLAGS=-I/usr/lib/python2.7/site-packages/numpy/core/include/を実行してから、コンパイルしてみてください。これは、いくつかの異なるパッケージの問題です。同じ問題について ArchLinux にバグが報告されています: https://bugs.archlinux.org/task/22326

于 2013-02-02T00:46:54.770 に答える