首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PyArray_SimpleNewFromData创建Numpy NDArray的问题

从PyArray_SimpleNewFromData创建Numpy NDArray的问题
EN

Stack Overflow用户
提问于 2016-07-28 16:16:03
回答 1查看 253关注 0票数 0

我尝试使用python包装器将一些C++函数和类型绑定到python。我的问题是当我试图将自定义矩阵类型转换为numpy ndarray时。最令人信服的解决方案是使用PyArray_SimpleNewFromData

为了测试它的行为,因为我没有做到我想做的事情,所以我尝试实现了一个简单的测试:

代码语言:javascript
复制
PyObject* ConvertToPython(...) {
    uint8_t test[10] = {12, 15, 82, 254, 10, 32, 0, 8, 127, 54};
    int32_t ndims = 1;
    npy_intp dims[1];
    dims[0] = 10;
    int32_t typenum = (int32_t)NPY_UBYTE;
    PyObject* python_object = PyArray_SimpleNewFromData(ndims, dims, typenum, (void*)test);
    Py_XINCREF(python_object);
    return python_object;
}

然后我在python中得到了这些结果:

代码语言:javascript
复制
type(test) = <type 'numpy.ndarray'>
test.ndim = 1
test.dtype = uint8
test.shape = (10,)

但是数组中的值是:

代码语言:javascript
复制
test.values = [ 1  0  0  0  0  0  0  0 80  8]

我不明白,我到底做错了什么?而且我没有做python包装器的经验,所以任何帮助都将是可贵的!

EN

回答 1

Stack Overflow用户

发布于 2016-07-28 16:49:46

我会尝试使用由malloc分配的数组,然后可能会设置一些名为OWNDATA的标志,以避免内存泄漏。

如果numpy.ndarray的实例不复制数据,而只是存储指向所提供的数组的指针,那么至少垃圾数据是可以解释的。函数返回后,指向堆栈分配数组的指针指向内存,该内存可能在堆栈发生变化时随时发生变化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38630716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档