繁体   English   中英

如何使用Python访问属于对象的动态C ++数组变量?

[英]How to access dynamic C++ array variable, belonging to an object, with Python?

我有一个带有动态数组变量的C ++类。 这非常简单,目前仅用于测试目的:

class testClass {

public:
    int *x;

    testClass();
    ~testClass();
};

当前通过构造函数,使用一些值来初始化变量x 我正在尝试通过Cython为C ++类编写一个可以访问x的python包装器代码。 我怎样才能做到这一点?

最好的办法是能够访问变量而不复制大量数据,因为x可能很大。 我可以以numpy数组形式访问它吗?

例如,它表现为numpy数组,例如只能读取? 我希望能够在python的其他计算中使用x中的数据,因此首选numpy数组。

我想我可以创建一个GET方法来初始化一个numpy数组,将其传递给GET方法,并用循环将x的数据填充到其中,但这会复制数据,而且看起来不是很优雅。 希望有更好的解决方案。

我尝试过使用静态数组,并找到了一种行之有效的解决方案。 如果x是静态的,则可以在.pyx文件中执行以下操作:

cdef extern from "testClass.h":
    cdef cppclass testClass:
        testClass()
        int x[5]

cdef class pyTestClass:
    cdef testClass *thisptr

    def __cinit__(self):
        self.thisptr = new testClass()
    def __dealloc__(self):
        del self.thisptr

    property x:
        def __get__(self):
            return self.thisptr.x

如果我在Python中访问x ,我将获得一个Python列表,并返回值。


如何使用Python访问属于对象的动态C ++数组变量?

看一下这个示例该示例说明了如何将在C中分配的数组公开给numpy而没有数据副本。 例如,在Cython中使用已分配的数据创建一个一维numpy整数数组的相关行是,

ndarray = np.PyArray_SimpleNewFromData(1, shape, np.NPY_INT, data_pointer) 

请参阅相应的Numpy文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM