Cython中的“仅C”类

时间:2019-02-04 11:08:31

标签: python cython

假设我定义了一个像这样的类:

cdef class A:
    cdef int a
    def __cinit__(self):
        self.a = 0

现在我想在不同的类中包含A数组:

cdef class B:
    cdef A* b
    def __cinit__(self, SIZE_t n):
        self.b = <A*>realloc(self.p[0], sizeof(A)*n)

但是我得到了错误:

Pointer base type cannot be a Python object

编辑:我意识到我并没有明确说明我正在尝试设置A的动态长度数组,realloc在某些时候,这就是为什么我有一个指向该类型的指针。

编辑2:我的基本要求是:

  • 我有一个自我编写的课程,我很高兴只有一个C接口。
  • 我需要有一个动态分配的数组和一个动态分配的数组数组(或指向指针的指针)。

我知道指针可能不是最好的方法,如果有更好的解决方案,我很高兴。这就是为什么我要说它不是this question的副本。我已经读过一个,它不能回答这个问题。

有关更多背景信息,这是我在此scikit-learn/PR/commit中介绍的BitSet

编辑3:对于一维数组,我也许可以使用memoryview,例如:

    ...
    cdef A[:] b
    ...
    for i in range(n):
        b[i] = A()

但是我不确定如何处理长度可变的二维。我只是希望我可以使用类似vector<vector<A>>的东西。

0 个答案:

没有答案