如何在C中检查ndarray的数据类型

时间:2013-01-12 15:46:12

标签: c numpy

有人能告诉我如何检查已传递给C代码的ndarray的数据类型吗?

在具体示例中,如果数组的数据类型为float32double/float64,我想调用另一个函数。像

这样的东西
if( Dtype(MyArray) == NPY_FLOAT )
{
   DoSomething_float( MyArray );
}
else
{
   DoSomething_double( MyArray );
}

我已经找到了

PyTypeNum_ISFLOAT(num)
PyDataType_ISFLOAT(descr)
PyArray_ISFLOAT(obj)

在numpy C API中,但我不明白如何使用它们。我已经试图找到一个有启发性的例子,但没有找到。

2 个答案:

答案 0 :(得分:7)

你几乎就在那里,因为你正在寻找PyArray_TYPE

int typ=PyArray_TYPE(MyArray);

switch(typ) {
case NPY_FLOAT:
    DoSomething_single(MyArray);
    break;
case NPY_DOUBLE:
    DoSomething_double(MyArray);
    break;
default:
    error("unknown type %d of MyArray\n", typ);
}

答案 1 :(得分:4)

如果您正在处理PyArrayObject* arr,那么执行此操作的漫长而复杂的方法是检查arr->descr->typearr->descr->type_num

  

char PyArray_Descr.type   表示数据类型的传统字符代码

     

int PyArray_Descr.type_num唯一标识数据的数字   类型。对于新数据类型,此数字在数据类型时分配   已注册

正如@umlauete的回答指出的那样,有更简洁的方法将其纳入您的代码中,但了解PyArrayObjectPyArray_Descr结构中的内容总是一件好事。并始终“阅读the docs,卢克!”