Вы можете указать подпись функции, используя ключевое слово signature
.Тем не менее, он попытается использовать последние измерения каждого входа, поэтому вам придется вручную транспонировать.Пример
F = np.vectorize(np.matmul, signature='(m,n),(n,l)->(m,l)', otypes=(float,))
A = np.arange(12).reshape(2, 2, 3)
B = np.diag((1.5, 2.5))
# F(A.transpose(2,0,1), B)
# array([[[ 0. , 7.5],
# [ 9. , 22.5]],
#
# [[ 1.5, 10. ],
# [10.5, 25. ]],
#
# [[ 3. , 12.5],
# [12. , 27.5]]])
Как отметил @hpaulj в комментариях vectorize
- это удобная функция, а не повышение производительности.