我知道这个问题已经被回答了很多次,我也阅读了文档,但仍然不清楚它是如何工作的。也就是说,我不明白它的参数是如何填充值的。示例没有很清楚地解释它(或者可能是我自己理解能力有限)。请问有人可以帮我理解这个函数的参数是如何填充的吗?它们应该具有什么值?
我需要在不重新分配内存的情况下从C++传递一个向量到Python。
非常感谢任何帮助。我已经卡在这个问题上很多天了。
我正在实现的代码:
我需要在不重新分配内存的情况下从C++传递一个向量到Python。
非常感谢任何帮助。我已经卡在这个问题上很多天了。
我正在实现的代码:
int main(int argc, char *argv[])
{
PyObject *pName, *pModule, *pDict, *pFunc, *pValue, *pArgs,*pXVec,*c, *xarr1;
int i;
float fArray[5] = {0,1,2,3,4};
//float *p = &fArray[0] ;
npy_intp m = 5;
//void* PyArray_GetPtr(PyArrayObject* aobj, npy_intp* ind)¶
// Initialize the Python Interpreter
Py_Initialize();
PySys_SetArgv(argc, argv);
// Build the name object
pName = PyString_FromString(argv[1]);
// Load the module object
pModule = PyImport_Import(pName);
printf("check0\n");
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);
printf("check1\n");
// pFunc is also a borrowed reference
pFunc = PyDict_GetItemString(pDict, argv[2]);
printf("check2\n");
// if (PyCallable_Check(pFunc))
// {
// Prepare the argument list for the call
//xarr1 = PyFloat_FromDouble(xarr[1]);
printf("check3\n");
c = PyArray_SimpleNewFromData(1,&m,NPY_FLOAT,(void *)fArray);
printf("check3\n");
pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs,0, c);
pValue = PyObject_CallObject(pFunc, pArgs);
if (pArgs != NULL)
{
Py_DECREF(pArgs);
}
//}
// else
// {
// PyErr_Print();
// }
// Clean up
Py_DECREF(pModule);
Py_DECREF(pName);
// Finish the Python Interpreter
Py_Finalize();
return 0;
}
printf
语句输出一下吗? - Ami TavoryfArray
,但是告诉它有14个项目的空间(m
),这会在尝试访问时导致分段错误。话虽如此,你的问题更可能是由于没有在模块初始化时调用import_array()
引起的,请参考这里。 - Jaime