尝试更改此:
static PyObject *_aux_error(PyObject *self) {
对此:
static PyObject *_aux_error(PyObject *self, PyObject *args) {
args即使您不使用它定义函数,Python也会传递该参数。
您的代码仍然存在一个基本问题。您已经使用
vector堆栈上的数组创建了一个numpy数组。当
_aux_error返回时,该内存将被回收并可重复使用。
您可以使用
PyArray_SimpleNew()分配numpy数组的方式创建数组,然后将其复制
vector到数组的数据中:
static PyObject *_aux_error(PyObject *self, PyObject *args){ double vector[2] = {1.0 , 2.0}; npy_intp dims[1] = {2}; PyObject *ret = PyArray_SimpleNew(1, dims, NPY_DOUBLE); memcpy(PyArray_DATA(ret), vector, sizeof(vector)); return ret;}
请注意,我将类型更改为
NPY_DOUBLE;
NPY_FLOAT是32位浮点类型。
在一条评论中,您询问了有关在中动态分配内存的问题
_aux_error。这是可能有用的示例的变体。数组的长度仍用硬编码
dims,因此它不是完全通用的,但可能足以解决注释中的问题。
static PyObject *_aux_error(PyObject *self, PyObject *args){ double *vector; npy_intp dims[1] = {5}; npy_intp k; PyObject *ret = PyArray_SimpleNew(1, dims, NPY_DOUBLE); vector = (double *) PyArray_DATA(ret); for (k = 0; k < dims[0]; ++k) { vector[k] = 1.0 + k; } return ret;}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)