Предположим, у меня есть функция f с сигнатурой
который я хочу векторизовать. Я хочу, чтобы a мог иметь любую форму, а b должен быть таким, чтобы np.shape(b) == np.shape(a)[-1]. Схематически векторизация должна выглядеть так out[...,:] = f(a[...,:],b[:]) . Под этим я подразумеваю, что для определенного индекса : вдоль последней оси a я хочу вызвать f с одинаковым значением b[:] для всех индексов... в первых компонентах a (т.е. всех, кроме последнего). Я мог бы написать что-то вроде следующего:
Код: Выделить всё
def f_vectorized(a,b):
bext = np.empty(np.shape(a))
bext[...,:] = np.asarray(b)[:]
bc = np.broadcast(a,b)
out = np.empty(bc.shape)
out.flat = [f(_a, _b) for (_a,_b) in bc]
return out
Одна из проблем заключается в том, что это не работает, если b 0-мерный. Другая проблема в том, что это, возможно, не очень элегантно. Есть предложения?
Обратите внимание, что я не могу (насколько мне известно) использовать встроенный np.vectorize из-за присутствия **kwargs (см. еще один мой вопрос здесь).
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ble-inputs