Я использую библиотеку, написанную на C ++ и доступную для Python через SWIG. Одна из функций выглядит примерно так:
int addPoints(std::vector<Point> positions)
, где Point
- это структура, определенная в C ++, которая имеет конструктор, который принимает массив из 3 чисел с плавающей запятой. Это очень медленно, потому что у меня около 1 миллиона очков, и в Python мне нужно назвать его как
addPoints([MyLib.Point(p) for p in my_points])
, и все вызовы MyLib.Point.__init__
занимают много времени.
Есть ли способ указать SWIG принимать Python список кортежей / списков с плавающей точкой в качестве аргумента функции (ie просто my_points
как есть), вместо того, чтобы требовать от меня вызова конструктора 1 миллион раз в Python?
Прошу прощения, это похоже на вопрос, на который раньше задавали и отвечали, но я не могу его найти. Я подозреваю, что это связано с типографскими картами, но документация SWIG о типографских картах отговаривает меня (как новичка) от попыток выяснить это самостоятельно:
"типографские карты" являются продвинутыми функция настройки, которая обеспечивает прямой доступ к низкоуровневому генератору кода SWIG. Мало того, они являются неотъемлемой частью системы типов SWIG C ++ (ее нетривиальные топики c).