Первая векторизация foo()
, т.е. изменить foo()
таким образом, чтобы он мог корректно работать с массивом формы (N, A, B)
, возвращая массив формы (A, B)
. Этот шаг обычно трудный. Как это сделать целиком, зависит от того, что делает foo()
. Для данного примера это очень легко сделать:
def foo(arr):
return np.sum(arr, axis=0)
Теперь используйте правила вещания , чтобы создать массив (N, A, B)
, содержащий все различия векторов, и передать его в foo()
:
foo(a[:, :, np.newaxis] - b[:, np.newaxis])