Как умножить два 3D-массива без использования цикла, используя Numpy или любую другую библиотеку в Python - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь умножить два трехмерных массива форм M1 (10, 3, 4) и M2 (25, 4, 1).Я могу выполнить операцию как

В настоящее время я выполняю эту операцию, используя цикл.

for i in range(M2.shape[0]):
        a[i] = np.matmul(M1,M2[i].reshape(1,4,1))

и я добавляю результат из каждого цикла и создаю матрицу.Я хочу избежать цикла for и попытаться выполнить ту же операцию, только используя матричную операцию.Есть ли способ выполнить эту операцию, используя Numpy или любую другую библиотеку в Python?Пожалуйста, предоставьте образец кода для этого.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Вы можете использовать np.einsum, чтобы решить эту проблему

M1 = np.random.randn(10,3,4)
M2 = np.random.randn(25,4,1)
out = np.einsum('abc,dce->dabe', M1, M2)
print(out.shape)
Out: (25, 10, 3, 1)

Выше abc являются размерами M1, а dce являются размерами M2.Обратите внимание, c является общим измерением в M1 и M2.

0 голосов
/ 12 апреля 2019

Попробуйте numpy.tensordot , то есть то, что используется для умножения матрицы более высокой размерности

import numpy as np

a = np.arange(60.).reshape(3,4,5)
b = np.arange(24.).reshape(4,3,2)
c = np.tensordot(a,b, axes=([1,0],[0,1]))
...