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

时间:2015-07-19 12:46:38

标签: python c++ numpy cython

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

class testClass {

public:
    int *x;

    testClass();
    ~testClass();
};

变量x初始化时带有一些值,目前通过构造函数。我试图通过可以访问x的{​​{3}}为C ++类编写一个python包装器代码。我怎么能这样做?

最好的办法是能够在不复制大量数据的情况下访问变量,因为x可能很大。我可以访问作为numpy 数组吗?

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

我想我可以使用GET方法初始化 numpy 数组,将其传递给GET方法并使用{{1}中的数据填充它带循环,但这会复制数据,看起来并不优雅。希望有更好的解决方案。

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

.pyx

如果我在Python中访问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列表。

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

1 个答案:

答案 0 :(得分:0)

查看this example,了解如何在没有数据副本的情况下将C中分配的数组暴露给numpy。例如,在Cython中创建已分配数据的1D numpy整数数组的相关行是,

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

请参阅相应的Numpy documentation