есть функция, которая получает точку А и лист точек, вычисляет евклидово расстояния от точки А до всех точек в массиве
точек А много и массив точек очень большой, поэтому здесь у меня бутылочное горлышко
все усложняется тем, что точка это словарь, который представляет многомерное пространство(1.0 — 2к) и в точке А могут быть не определены многие пространства
переносить словарь в лист не желательно
Стоит ли делать эту функцию на C++?
немного поискав я понял, что это не так просто Если стоит, то на чем предпочтительнее?
в Boost.Python я так и не нашел, что качать, там тонна бинарников
PyCXX предпочтителен, но не компилируется
а то что в стандартной библиотеке плохо описано Если я сделаю эту функцию на С++ возрастет ли потребление памяти?
Есть варианты:
— использовать PyPy. JIT. ускоряет выполнение кода.
— NumPy — библиотека для научных вычислений.
— Cython — Надмножество python для удобного написания расширений.
— SWIG (поддерживает множество языков в т.ч. и Python);
— ctypes — создаёт библиотеку на Си с нужным функционалом, собираем её и вызываем функции из созданной dll/so/pyd;
— Python C API.
Если я сделаю эту функцию на С++ возрастет ли потребление памяти?
Более чем вероятно, что уменьшится. Переменные в Python требуют больше памяти, чем переменные в Си (напр. из-за метаданных и пр.).
Написать библиотеку на С с нужной функцией. Потребление памяти возрастет на размер получившейся библиотеки, но я так понимаю, вам нужна, главным образом, скорость. Как вариант — написать на Cython, в данном случае будет почти тоже самое, что и руками на С.