Умножение между массивами различной формы в numpy - PullRequest
1 голос
/ 10 февраля 2020

Я новичок в Python, и я не знаю точно, как выполнить умножение между массивами различной формы. У меня есть два разных массива w и b, таких как:

W.shape = [32, 5, 20]
b.shape = [5,]

, и я хочу умножить

W[:, i, :]*b[i]

для каждого i с 0 до 4. Как я могу сделать который? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Вы можете добавить новую ось к b, чтобы она умножалась по строкам внутренних массивов W, то есть по второй оси:

W * b[:,None]
1 голос
/ 10 февраля 2020

То, что вы хотите сделать, называется Broadcasting . В numpy вы можете умножать таким образом, но только если формы соответствуют в соответствии с некоторыми ограничениями:

Начиная справа, каждый компонент каждого массива shape должен быть равен 1 или не существует

, поэтому прямо сейчас у вас есть:

W.shape = (32, 5, 20)
b.shape =        (5,)

, поскольку 20 и 5 не совпадают, они не могут быть переданы.

Если бы вы Имеет:

W.shape = (32, 5, 20)
b.shape =     (5, 1 )

20 будет соответствовать 1 (1 всегда в порядке), и 5 будут совпадать, и вы можете умножить их.

Чтобы получить b форму (5, 1), вы можете либо сделать .reshape(5, 1) (или, более надежно, .reshape(-1, 1)), либо создать модный индекс с [:, None]

Таким образом, любая из этих работ:

W * b[:,None] #yatu's answer
W * b.reshape(-1, 1)
...