7

ndarrayCコードに渡されたのデータ型を確認する方法を教えてもらえますか?

具体的な例では、配列のデータ型がまたはの場合、別の関数を呼び出したいと思い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ですが、使い方がわかりません。私はすでに有益な例を見つけようとしましたが、何も見つかりませんでした。

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

これを行うための長く複雑な方法は、を扱っている場合、次のことPyArrayObject* arrを確認することです。arr->descr->typearr->descr->type_num

char PyArray_Descr.type データ型を示す従来の文字コード

int PyArray_Descr.type_numデータ型を一意に識別する番号。新しいデータ型の場合、この番号はデータ型の登録時に割り当てられます

@umlaueteの回答が指摘しているように、それをコードに組み込むためのよりクリーンな方法がありますが、自分PyArrayObjectと構造体に何が含まれているかを知ることは常に良いことPyArray_Descrです。そして、常に「ドキュメントを読んでください、ルーク!」

于 2013-01-12T16:06:30.160 に答える