Умножение матриц с зависимостью итератора - 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