我是cython新手,在包装现有的C库(foolib)时需要为numpy数组定义类型时,我有点不知所措。此库使用定义的int大小类型,具体取决于平台以及它是否以32位或64位构建。在
以下是foolib.h
的摘录:
#include "footypes.h"
...
int foo_zone_read(int fn, int B, int Z, char *zonename, foosize_t *size);
以下是footypes.h
中的内容:
我还有cython包装纸。以下是cython头foolib.pxd
:
cdef extern from "foolib.h":
ctypedef int foosize_t
...
int foo_zone_read(int fn, int B, int Z, char *zonename, foosize_t *size)
以及实际的cython包装器bar.pyx
:
import numpy
cimport numpy
cimport foolib
...
cdef class pyFOO(object):
def __init__(self, filename)
pass
cpdef zone_read(self, int B, int Z):
cdef char zonename[MAXNAMELENGTH]
cdef int *zsize
cdef int ztype_read
cdef numpy.ndarray[cgsize_t, ndim=1] azsize
在最后一行,当我试图编译时出现了一个cython错误:
cdef numpy.ndarray[cgsize_t, ndim=1] azsize
^
------------------------------------------------------------
bar.pyx:285:31: Invalid type.
我试图阅读C-API numpy参考,但是我有点迷路了。我只想用正确的类型键入asize
。我知道在linux上它是dtype=int32
或{asize=numpy.ones(2, dtype=numpy.int64)
它本来可以工作的,但是现在类型是硬编码的,我不想这样。在
我的问题是如何在数组之间传递信息。 我的第二个问题是如何指定numpy数组的大小(如果我用python语法来指定,这很容易,但是对于numpyc-API,我不太清楚)。我知道它可以是形状(2)或(6)的数组,具体取决于运行时的条件。在
提前谢谢。在
目前没有回答
相关问题 更多 >
编程相关推荐