2012-06-12 126 views
7

什么是令人困惑的是,如果你想创建一个数组使用Cython中numpy“类型标识符”和“类型”有什么区别?

chunk = np.array ([[94.,3.],[44.,4.]], dtype=np.float64) 

但是,如果你要定义一个buffer参考里面的类型,您使用

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

    print A 

通知np.float64之间的区别和np.float64_t

我的猜测

我猜测,一个type identifier是什么明确创建瓦特/用Cython类似C typedef语法

ctypedef np.float64_t dtype_t 

但numpy的type仅仅是Python的<type 'type'>型。

>>> type (np.float64) 
<type 'type'> 

关于dtype的Numpy文档不帮助我。 http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

回答

6

在用Cython代码,你这样做:在python空间

import numpy as np 
cimport numpy as np 

第一线进口numpy的模块,但第二行只包括在用Cython空间numpy.pxd。

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

ctypedef double  npy_float64 
ctypedef npy_float64 float64_t 
+0

好吧,看起来大部分{float,int} {32,64} _t都是C类型double,扩展为Python。虽然我找不到没有“_t”的类型,至少在numpy.pxd – HeyWatchThis

+0

没有“_t”的类型来自“import numpy”,而不是来自“cimport numpy”。如果这是令人困惑的,你可以做“cimport numpy as cnp”来查看差异。 –

+0

是的,我刚刚也阅读了[http://cython.readthedocs.org/en/latest/src/tutorial/numpy.html]。您可以添加,作为答案,我会接受,或者最终我只是添加它。 – HeyWatchThis

相关问题