我有一个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 ++数组变量?
答案 0 :(得分:0)
查看this example,了解如何在没有数据副本的情况下将C中分配的数组暴露给numpy。例如,在Cython中创建已分配数据的1D numpy整数数组的相关行是,
ndarray = np.PyArray_SimpleNewFromData(1, shape, np.NPY_INT, data_pointer)
请参阅相应的Numpy documentation。