2010-07-09 3 views
1

Я хотел бы преобразовать двойной массив numpy в numpy float array в C (Swig). Я пытаюсь использоватьпреобразование типа numpy массивов в C

PyObject *object = PyArray_FROM_OT(input,NPY_FLOAT) 

или

PyObject *object = PyArray_FROMANY(input,NPY_FLOAT,0,0,NPY_DEFAULT) 

или

PyObject *object = PyArray_FromObject(input,NPY_FLOAT,0,0) 

или

PyObject *object = PyArray_ContiguousFromAny(input,NPY_FLOAT,0,0) 

Но все они возвращают NULL? Я что-то пропустил?

+0

Еще нет ответов? Может ли кто-нибудь сказать мне, как конвертировать типы с использованием API в целом? – lakshmesha

ответ

3

Ваш подход верен, но ваше предположение о том, что они имеют API-интерфейс numpy C, это не так. NPY_FLOAT является просто интегральной константой, но функции, которые вы указали, должны иметь параметр типа a poitner to PyArray_Descr struct.

Для того, чтобы получить описание типа от простого типа, вы можете позвонить PyArray_DescrFromType, так что ваш вызов может выглядеть следующим образом:

PyArrayObject* float_array = (PyArrayObject*)PyArray_FromAny(input,PyArray_DescrFromType(NPY_FLOAT64), 0,0, flags); 

... с флагами быть любые флаги вы считаете значимыми при преобразовании - ознакомьтесь с API-интерфейсом numpy, как для правильного вызова API, так и для значения различных флагов и значений.

Смежные вопросы