преобразование типа numpy массивов в C - PullRequest
2 голосов
/ 09 июля 2010

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

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? Я что-то упустил?

1 Ответ

4 голосов
/ 09 августа 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...