Numpy C API整数标量

时间:2019-07-19 22:47:51

标签: python numpy cython

我试图使用numpy C API来检查对象的整数类型(numpy类型以及python整数)。我正在执行以下操作:

使用以下命令创建cython test.pyx

cdef extern from "numpy/ndarrayobject.h":
    bint PyArray_IsIntegerScalar(obj)

def check_int(object obj):
    return PyArray_IsIntegerScalar(obj)

使用python setup.py build_ext --inplace进行编译。 setup.py为:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize('test.pyx',
                          annotate=True,
                          language_level=3)
)

然后使用以下最简单的内容运行test.py

import test
print(test.check_int(1.1))

但是我收到Segmentation fault (core dumped)。我错过了什么?甚至找不到PyArray_IsIntegerScalar的{​​{3}}。只需在numpy doc中找到它即可。

numpy 1.16.4 Cython 0.29.2

1 个答案:

答案 0 :(得分:1)

您需要先调用Numpy's import_array function,然后才能使用Numpy C API。这意味着在模块初始化时(即在全局范围的顶部)进行此操作:

cimport numpy
numpy.import_array()

# your code goes here, unchanged

(您也可以在import_arrray块中获得cdef extern而不是cimport)