Мне нужно запустить функцию, которая находит корень уравнения, зависящего от одного параметра, на большом наборе данных (настоящее уравнение намного сложнее, но формально эквивалентно).
def f(x):
return numpy.optimize.brentq(lambda y:numpy.exp(-abs(x)*y)-y,0,1)
Удобно ли его векторизовать? Я пытался использовать numpy.vectorize(f), который отлично работает, но я думаю, что с той же скоростью, что и у цикла python for.
Есть ли какая-то ручная векторизация, чтобы лучше использовать возможности вычисления массива numpy?
numpy.vectorizeявляется оболочкой цикла for, поэтому в вашем случае он бесполезен. Проблема здесь в том, что функцияbrentqнаписана только для скаляров, как обсуждалось в другом тема. Как было предложено там, вам лучше использовать простое понимание спискаfor. - person yevgeniy   schedule 19.08.2015scipy.optimize.fsolve, так как он принимает векторизованный ввод. - person yevgeniy   schedule 19.08.2015