Cython中numpy"type identifiers"和"types"有什么区别?

Hey*_*his 7 python numpy cython

令人困惑的是,如果你想创建一个你使用的数组

chunk = np.array ( [[94.,3.],[44.,4.]], dtype=np.float64)
Run Code Online (Sandbox Code Playgroud)

但是如果要在buffer引用中定义类型,则使用

cdef func1 (np.ndarray[np.float64_t, ndim=2] A):

    print A 
Run Code Online (Sandbox Code Playgroud)

注意之间的差异np.float64np.float64_t.

我的猜测

我猜这是一个type identifier用Cython C式typedef语法明确创建的

ctypedef np.float64_t dtype_t
Run Code Online (Sandbox Code Playgroud)

但numpy type只是Python <type 'type'>类型.

>>> type ( np.float64)
<type 'type'>
Run Code Online (Sandbox Code Playgroud)

关于dtypes 的Numpy文档对我没有帮助.http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

HYR*_*YRY 6

在你的cython代码中,你做:

import numpy as np
cimport numpy as np
Run Code Online (Sandbox Code Playgroud)

python空间中的第一行导入numpy模块,但第二行只包含cython空间中的numpy.pxd.

你可以在你的cython安装文件夹中找到numpy.pxd.它将float64_t定义为:

ctypedef double       npy_float64
ctypedef npy_float64    float64_t
Run Code Online (Sandbox Code Playgroud)