Функция отображения в массив numpy, изменяющий параметр - PullRequest
2 голосов
/ 20 октября 2010

Во-первых, позвольте мне показать вам код:

a = array([...])
for n in range(10000):
    func_curry = functools.partial(func, y=n)
    result = array(map(func_curry, a))
    do_something_else(result)
    ...

Я пытаюсь применить func к массиву, меняя каждый раз значение второго параметра func. Это SLOOOOW (создание новой функции каждую итерацию, безусловно, не помогает), и я также чувствую, что пропустил питонический способ сделать это. Любое предложение?

Может ли решение, которое дает мне двумерный массив, быть хорошей идеей? Я не знаю, но, возможно, это так.

Ответы на возможные вопросы:

  • Да, это (в широком определении) проблема оптимизации (do_something_else() скрывает это)
  • Нет, scipy.optimize не работает, потому что я имею дело с булевыми значениями и, похоже, никогда не сходится.

Ответы [ 3 ]

6 голосов
/ 22 октября 2010

Вы пробовали numpy.vectorize?

...
    vfunc_curry = vectorize(functools.partial(func, y=n))
    result = vfunc_curry(a)
...
0 голосов
/ 12 февраля 2011

Можете ли вы переписать функцию? Если возможно, вы должны написать функцию для двух массивов a и numpy.arange(n). Возможно, вам придется изменить форму, чтобы выстроить массивы в очередь для вещания.

0 голосов
/ 21 октября 2010

Если a имеет значительный размер, узким местом должно быть не создание функции, а дублирование массива.

...