C代码的NumPy(numarray)问题

遵循Numpy文档,我接管了一些C代码, 但是遇到了一个错误. 有人有建议吗? 谢谢, 马克 gdlpython.cpp:225:`pyarray_type'undeclared(首先使用此功能) #include //使用Python Numarray #include // ... basegdl* frompython(pyObject* pyobj) { PyObject *对象; //以下是第225行 if(! //请忘记其余的或看一看,告诉我这是否有效 //就像我期望的那样,或者是否有明显的错误 //这是我第一次与Python接口 { //非阵列 - 尝试其他 pyerr_clear(); // 细绳 char* s; if(pyarg_parsetuple(pyobj," s",s)) 返回新的dstringgdl(String(s)); pyerr_clear(); // 整数 dlong l; if(pyarg_parsetuple(pyobj," l",&l)) 返回新的dlonggdl(l); pyerr_clear(); // 复杂的 py_complex c; if(pyarg_parsetuple(pyobj," d",&c)) { dcomplexdbl cc(c.real,c.imag); 返回新的dcomplexdblgdl(CC); } pyerr_clear(); // 漂浮 ddouble d; if(pyarg_parsetuple(pyobj," d",&d)) 返回新的ddoublegdl(d); 投掷gdlexception(" frompython:无法转换python对象."); } //数组类型 pyarrayObject* array =(pyarrayObject*)对象; int ndim = array-> nd; int item_type = array-> descr-> type_num; //使阵列连续 // array = static_cast //(pyarray_contigouuxfromobject(对象, // 物品种类, // 0,0)); array =(pyarrayObject*)pyarray_contigousfromobject(对象, 物品种类, 0,0); if(array == null) 投掷gdlexception(" frompython:错误使数组连续."); size_t dimarr [maxrank]; 如果(ndim> maxrank) { 警告(" frompython:阵列都超过"+maxrank_str+" "尺寸.延长最后一个."); size_t lastDim = array-> dimensions [maxrank-1]; 对于(size_t i = maxrank; i dimensions [i]; for(size_t i = 0; i dimensions [i]; dimarr [maxrank-1] = lastDim; ndim = maxrank; } 别的 { for(size_t i = 0; i dimensions [i]; } dimension dim(dimarr,ndim); 切换(item_type) { // case pyarray_notype:// undef *** case pyarray_ubyte:// byte 返回new frompyarrayObject (dim,array); case pyarray_short:// int 返回new frompyarrayObject (dim,array); case pyarray_int:// long 返回new frompyarrayObject (dim,array); 案例pyarray_float:// float 返回new frompyarrayObject (dim,array); case pyarray_double:// double 返回new frompyArrayObject (dim,array); 案例pyarray_cfloat://复杂 返回new frompyArrayObject (dim,array); // case pyarray_notype:// string *** // case pyarray_notype:// struct *** 案例pyarray_cdouble:// complexdbl 返回new fromplexdblgdl>(dim,array); // case pyarray_notype:// ptr *** // case pyarray_notype://对象*** case tuint16:// uint* 返回newFrompyArrayObject (DIM,ARRAY); 案例t uint32:// ulong* 返回new frompyArrayObject (dim,array); 默认: 投掷gdlexception(" frompython:未知数组类型."); } 返回null; //编译器关闭 }

# 回答1

在某个时候,Marc Schellens 写道: - - |> | \/| < /------------------------------------------------------------------------------ ---------------------------------- \ | David M. Cooke | cookedm(at)物理(dot)mcmaster(dot)ca
# 回答2

谢谢, 我认为我正在使用错误的文档. 马克 大卫·库克(David M. Cooke)写道: 我不知道您是如何编译的,但是最好使用#include" python.h" #include" numArray/arrayObject.h",并指定适当的include include目录. 这样,您就不会硬编码到Python版本. 例如,Distutils自动将适当的目录添加到编译线中. 您正在使用NumArray,因此您可能需要使用NumArray接口而不是数字复杂性接口. 包括" numArray/libnumarray.h",而不是" numarray/arrayObject.h" Numarray中没有PyArray_Type这样的东西,实际上,没有一个数组类型. 我会首先检查特定的字符串/长/复合/双类型(下面的代码). 并使用na_inputarray()获取数组. 如果无法使参数成为数组,则将返回null. 您正在使用下面的数字兼容性函数; 您不妨使用Numarray等效物. 请注意,如果不是数组,数组也将是零的; 这将是一种更好的使用方法. 将上述内容替换为pyarrayObject* array = na_inputarray(object,tany,num_c_array); if(array == nulll){投掷gdlexception(" frompython:错误使数组连续."); } int item_type = array-> descr-> type_num; 仔细检查numarray c api文档,以了解您应该使用na_inputarray还是na_ioarray. 尚未仔细查看以下内容:改用NumArray类型:Tuint8,Tint8,Tint16,Tfloat64等:

标签: python

添加新评论