стоит ли запускать С++ из Python'а?

есть функция, которая получает точку А и лист точек, вычисляет евклидово расстояния от точки А до всех точек в массиве
точек А много и массив точек очень большой, поэтому здесь у меня бутылочное горлышко

все усложняется тем, что точка это словарь, который представляет многомерное пространство(1.0 — 2к) и в точке А могут быть не определены многие пространства

переносить словарь в лист не желательно

Стоит ли делать эту функцию на C++?
немного поискав я понял, что это не так просто
Если стоит, то на чем предпочтительнее?
в Boost.Python я так и не нашел, что качать, там тонна бинарников
PyCXX предпочтителен, но не компилируется
а то что в стандартной библиотеке плохо описано
Если я сделаю эту функцию на С++ возрастет ли потребление памяти?
  • Вопрос задан
  • 2959 просмотров
Решения вопроса 1
avalak
@avalak
Есть варианты:
— использовать PyPy. JIT. ускоряет выполнение кода.
NumPy — библиотека для научных вычислений.
Cython — Надмножество python для удобного написания расширений.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
resurtm
@resurtm
Если стоит, то на чем предпочтительнее?


Ещё способы:

SWIG (поддерживает множество языков в т.ч. и Python);
ctypes — создаёт библиотеку на Си с нужным функционалом, собираем её и вызываем функции из созданной dll/so/pyd;
Python C API.

Если я сделаю эту функцию на С++ возрастет ли потребление памяти?


Более чем вероятно, что уменьшится. Переменные в Python требуют больше памяти, чем переменные в Си (напр. из-за метаданных и пр.).
Ответ написан
@MikhailEdoshin
Написать библиотеку на С с нужной функцией. Потребление памяти возрастет на размер получившейся библиотеки, но я так понимаю, вам нужна, главным образом, скорость. Как вариант — написать на Cython, в данном случае будет почти тоже самое, что и руками на С.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы