7

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

float32在具体示例中,如果数组的数据类型是or ,我想调用不同的函数double/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 中,但我不明白如何使用它们。我已经尝试找到一个有启发性的示例,但没有找到。

4

2 回答 2

9

你快到了,因为你正在寻找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);
}
于 2013-01-12T15:53:16.180 回答
4

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

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

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

PyArrayObject正如@umlauete 回答所指出的那样,有更简洁的方法可以将其合并到您的代码中,但了解您的和PyArray_Descr结构中的内容总是一件好事。并且总是“阅读文档,卢克!”

于 2013-01-12T16:06:30.160 回答