#python #matlab #optimization #scipy #vectorization
#python #matlab #оптимизация #scipy #векторизация
Вопрос:
Я перенес некоторый код из matlab на python.
Часть кода находит корень векторизованной функции, вызов которой обходится дорого.
В matlab это эффективно достигается с помощью опции JacobPattern . Используя эту опцию, решатель знает, что n-й элемент возвращаемого вектора зависит только от n-го элемента вектора аргументов.
options = optimset('Algorithm','trust-region-reflective','JacobPattern',speye(lengthOfArgument));
roots = fsolve(@VectorisedFunction, initialGuesses, options);
Векторизация в matlab ускоряет процесс примерно в 100 раз, и я ожидаю, что нечто подобное может быть достигнуто в python. Я просматривал scipy.optimization, но не могу найти эквивалент JacobPattern .
Итак, я спрашиваю: каковы наилучшие подходы к нахождению корня векторизованной функции в python?
Ответ №1:
Я не уверен, что именно делает эта дорогостоящая функция, о которой вы говорите, но numpy передает функции каждому элементу в массиве (векторизация выполняется бесплатно).
Таким образом, вы могли бы просто вернуться из дорогостоящей функции, если она работает с элементом 0 в вашем разреженном массиве.
Комментарии:
1. Спасибо. Похоже, это сработало бы в общем случае, но в данном конкретном случае мой массив не должен содержать нулей.
2. Я думал, у вас разреженный массив? Разве не поэтому вы бы использовали JacobPattern?