Трехмерный массив как умножение вектора и матрицы - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть массив A (shape = (a, 1)) и матрица B (shape = (b1, b2)).Хотите умножить последний на каждый элемент первого, чтобы создать трехмерный массив (shape = (a, b1, b2)).

Есть ли векторизованный способ сделать это?

import numpy as np
A = np.random.rand(3, 1)
B = np.random.rand(5, 4)
C = np.array([ a * B for a in A ])

1 Ответ

0 голосов
/ 07 февраля 2019

Есть несколько способов добиться этого.Один использует np.dot, обратите внимание, что необходимо будет ввести в B вторую ось, чтобы оба ndarrays можно было умножить:

C = np.dot(A,B[:,None])
print(C.shape)
# (3, 5, 4)

Используя np.multiply.outer, как предлагает @divakar:

C = np.multiply.outer(A,B)
print(C.shape)
# (3, 5, 4)

Или вы также можете использовать np.einsum:

C = np.einsum('ij,kl->ikl', A, B)
print(C.shape)
# (3, 5, 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...