问题描述
节日快乐...
使用 Python-C numpy C-API
if (!PyArg_ParseTuple(args,"lOO!O!O!O!O!O!O!",&N,&mychunk,&PyArray_Type,&py_local_F,&py_centers,&py_normals,&py_v1,&py_v2,&py_v3,&py_areas))
return NULL;
使用 C 程序输出的信息代码:
void print_pyfunction_info(char* name,PyArrayObject *arr)
{
int d = PyArray_NDIM(arr);
npy_intp N = PyArray_SIZE(arr);
printf("Python array name=%s ndim=%i,size=%li \n",name,d,N);
}
并在 C 程序中调用此函数:
char name1[128] = "py_v1";
print_pyfunction_info(name1,py_v1);
char name2[128] = "py_v2";
print_pyfunction_info(name2,py_v2);
char name3[128]="py_v3";
print_pyfunction_info(name3,py_v3);
char name4[128]="py_centers";
print_pyfunction_info(name4,py_centers);
char name5[128]="py_normals";
print_pyfunction_info(name5,py_normals);
char name7[128]="py_local_F";
print_pyfunction_info(name7,py_local_F);
产生正确的输出:
Python array name=py_v1 ndim=2,size=120
Python array name=py_v2 ndim=2,size=120
Python array name=py_v3 ndim=2,size=120
Python array name=py_centers ndim=2,size=120
Python array name=py_normals ndim=2,size=120
Python array name=py_local_F ndim=2,size=1600
工作正常!
现在,附加一个对象、一个数组和一个长整数,它们完全正确地传递给 C:
if (!PyArg_ParseTuple(args,"lOO!O!O!O!O!O!O!OO!l",&py_areas,&cells,&py_rootbounds,&Ncells))
return NULL;
信息中出现段错误(如果我使用 local_F 数组时没有要求提供信息):
char name1[128] = "py_v1";
print_pyfunction_info(name1,py_normals);
char name6[128]="py_rootbounds";
print_pyfunction_info(name6,py_rootbounds);
char name7[128]="py_local_F";
print_pyfunction_info(name7,py_local_F);
因段错误而中断:
Python array name=py_v1 ndim=2,size=120
Python array name=py_v2 ndim=2,size=120
Python array name=py_v3 ndim=2,size=120
Python array name=py_centers ndim=2,size=120
Python array name=py_normals ndim=2,size=120
Python array name=py_rootbounds ndim=1,size=6
Fatal Python error: Segmentation fault
从Python端来看local_F也是一样,是一个40x40的数组
local_F {} [[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]]
我没有资源,非常感谢任何帮助。
最好的祝福!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)