Проблема с векторизацией нешироковещательных входных данныхPython

Программы на Python
Ответить
Anonymous
 Проблема с векторизацией нешироковещательных входных данных

Сообщение Anonymous »

Предположим, у меня есть функция f с сигнатурой

Код: Выделить всё

def f(a,b):
который я хочу векторизовать. Я хочу, чтобы 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»