Возврат массива с плавающей точкой в ​​C ++ в Python

Я вполне уверен, что я не смотрю в нужных местах, потому что информацию по этой теме было чрезвычайно трудно найти.

У меня есть небольшая функция в C ++, которую вызывает Python, которая создает небольшой массив с плавающей точкой и возвращает их в Python.

Во-первых, кажется, что вы не можете использовать Py_BuildValue () для возврата массива произвольного размера в C ++ в виде списка в Python (мне неясно, почему это должно быть). Старый, но все еще актуальный пост Вот предлагает создать экземпляр объекта PyList, заполнить его элементами из массива, а затем вернуть его.

Что является приемлемым решением. Тем не менее, мои числа плавают в стиле C ++. Хотя библиотека Python предоставляет достаточно операций преобразования (строка C -> строка Python, C double -> число с плавающей точкой Python и т. Д.), Я не могу найти средства для простого преобразования числа с плавающей точкой C ++ в число с плавающей точкой Python. Я знаю, что плавающие числа Python эквивалентны двойным значениям в Си / Си ++, поэтому я полагаю, что я могу преобразовать плавающие числа в двойные, а затем в PyObject через PyFloat_FromDouble (), но я чувствую, что должен существовать более прямой способ сделать это.

Поскольку это чрезвычайно короткая функция и в значительной степени является доказательством концепции, я не чувствовал, что необходимо уделять время изучению SWIG, Boost Python или чего-то подобного; Я хотел бы сделать это с помощью встроенного Python / C ++ API. Любые предложения будут ценны!

0

Решение

С Питона float по сути C double, преобразование должно произойти в тот или иной момент. квотирование ссылка:

Python не поддерживает числа с плавающей запятой одинарной точности; Экономия на использовании процессора и памяти, которая обычно является причиной их использования, сводится на нет из-за накладных расходов на использование объектов в Python, поэтому нет смысла усложнять язык двумя типами чисел с плавающей запятой.

Так что конвертировать в double (возможно, просто передав значение в функцию, которая принимает double) и вы настроены.

Как также указывает текст, значения с плавающей точкой в ​​python являются объектами, которые идут с небольшим количеством накладных расходов. PyFloat_FromDouble позаботится о том, чтобы получить это право. Таким образом, выполнение этой функции — правильная вещь. То же самое относится и к созданию списка.

1

Другие решения


По вопросам рекламы [email protected]