Умножение матриц с зависимостью итератора - NumPy

Некоторое время назадthis question (теперь удалено, но 10K + пользователи могут просматривать его). Это выглядело интересно для меня, и я узнал что-то новое, пытаясь решить это, и я подумал, что стоит поделиться. Я хотел бы опубликовать эти идеи / решения и хотел бы видеть, как люди публикуют другие возможные способы ее решения. Я публикую суть вопроса дальше.

Итак, у нас есть два NumPy ndarraysa а такжеb форм:

a : (m,n,N)
b : (n,m,N)

Давайте предположим, что мы имеем дело со случаями, когдаm,n & N сопоставимы.

Задача состоит в том, чтобы решить следующие умножение и суммирование с акцентом на производительность:

def all_loopy(a,b):
    P,Q,N = a.shape
    d = np.zeros(N)
    for i in range(N):
        for j in range(i):
            for k in range(P):
                for n in range(Q):
                    d[i] += a[k,n,i] * b[n,k,j]
    return d

Ответы на вопрос(2)

Ваш ответ на вопрос