ram*_*ler 6 c python arrays numpy extending
故事:我正在尝试从C到Python的接口,以便为现有的Python代码使用更快的C计算速度.我已经取得了一些成功,也通过NumPy数组 - 但现在似乎有一个问题,我无法解决它.这是代码:
#define FORMAT_VALUE_T "d"
char format_buffer[32];
typedef struct
{
PyObject_HEAD
PyArrayObject *invmat;
unsigned order;
value_t weight, *buffer;
} Det;
typedef double value_t;
typedef struct
{
PyObject_HEAD
Det *det;
value_t *row, *covs, ratio, star;
} DetAppendMove;
static int append_init(DetAppendMove *self, PyObject *args, PyObject *kwds)
{
value_t star, *temp;
PyArrayObject *row, *col;
PyObject *result = Py_BuildValue("(i)",1);
Det *dete;
snprintf(format_buffer, sizeof(format_buffer), "%s%s", "O!O!O!", FORMAT_VALUE_T);
if (PyArg_ParseTuple(args, format_buffer, &DetType, &dete, &PyArray_Type, &row, &PyArray_Type, &col, &star))
{
self->det = dete;
temp = (value_t*)self->det->buffer;
}
else
{
result = Py_BuildValue("(i)",-1);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
它现在还没有真正做任何事情,我只是想检查一下我是否能够传递这些数组.正如标题所示,我收到以下错误消息:
SystemError:在PyObject调用中没有错误的NULL结果
这很有意思,因为我已经传递了一些数组(以相同的方式做到了......)并且通常这些数组甚至可能是100x100.通常人们抱怨非常大的阵列..
我在64Bit机器上使用Ubuntu 14.04,Python V2.7.6和Numpy 1.8.2
如果你们中的一个人可以帮助我会很棒 - 我不知道这里出了什么问题..
编辑:我还没有弄清楚这个问题,但有时候它会起作用,有时会因为上面的错误而崩溃.我完全不知道这可能是什么 - 任何人?
最近有人在另一篇文章中向我展示了答案:
当你从暴露给 python 的 ac 函数返回 NULL 时,你必须先设置错误消息,因为返回 NULL 意味着发生了错误。
如果发生错误并且因此返回 NULL,请使用 PyErr_SetString(),如果没有发生错误,则使用
Run Code Online (Sandbox Code Playgroud)Py_RETURN_NONE;
谢谢iharob,帮了很多忙!
L。