有人能告诉我如何检查已传递给C代码的ndarray
的数据类型吗?
在具体示例中,如果数组的数据类型为float32
或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中,但我不明白如何使用它们。我已经试图找到一个有启发性的例子,但没有找到。
答案 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->type
或arr->descr->type_num
:
char PyArray_Descr.type
表示数据类型的传统字符代码
int PyArray_Descr.type_num
唯一标识数据的数字 类型。对于新数据类型,此数字在数据类型时分配 已注册
正如@umlauete的回答指出的那样,有更简洁的方法将其纳入您的代码中,但了解PyArrayObject
和PyArray_Descr
结构中的内容总是一件好事。并始终“阅读the docs,卢克!”