найти корень векторизованной функции в python

#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?