Я пишу систему, которая позволяет выполнять сценарии Python в приложении C++.
Скрипты python используются для изменения значений в массивах данных (обычно массивы с плавающей запятой размером 2048x2048x4)
В настоящее время я использую массивы numpy, созданные с помощью API массивов и зарегистрированные в Python.
В скриптах python я обращаюсь к таким массивам, как
for all x in range(0,Width):
for all y in range(0,Height)
Array[x][y][0] = blah
Array[x][y][1] = blah
Array[x][y][2] = blah
Array[x][y][3] = blah
Это кажется довольно медленным. Есть ли более быстрый способ настроить это?





Вероятно, вам стоит посмотреть, можете ли вы установить несколько значений в массиве за один шаг, а не за четыре (или более) шага.
Я считаю, что здесь может быть полезен синтаксис многоточия:
Как вы используете синтаксис нарезки многоточием в Python?
Или еще что-то вроде:
Array[x,y,:]=blah
или же
Array[x,y,:]=blah1,blah2,blah3,blah4
если у вас разные значения для каждого элемента.
Предполагается, что узкое место в вашем коде связано с количеством выполняемых вами заданий. Вероятно, стоит провести некоторое профилирование, чтобы точно увидеть, что происходит медленно. Попробуйте использовать тот же код, но без сохранения результатов, чтобы убедиться, что он работает намного быстрее. Если нет, то, вероятно, медленное задание не в том ...
Возможно, вы захотите взглянуть на Boost.Python. Он ориентирован на то, чтобы сделать код C++ доступным в Python, но также предоставляет функции exec и eval, который должен позволить вам эффективно взаимодействовать с кодом Python.
Я думал, что предлагаю numpy, но вы уже его используете. Боюсь, что изменения, относящиеся к предметной области, будут делать меньше работы. Как упоминает Джон Монтгомери, вам нужно выяснить, что отнимает время в коде Python, и определить, можно ли этого избежать.
Есть ли закономерности в работе, выполняемой на Python? Возможно, вы можете предоставить вспомогательные функции для конкретной предметной области (написанные на C), которые можно вызывать из кода Python.