2D-3D умножение массива на numpy - PullRequest
1 голос
/ 08 января 2020

У меня есть два 2D (numpy) массива, из которых я хочу сгенерировать 3D-массив следующим образом: каждая из n строк первого массива умножит (поэлементно) второй массив создать новую матрицу, что приведет к n новым массивам (формируя трехмерный массив). Я думаю, что простой пример поможет понять:

A = [[a11 a12 a13]
     [a21 a22 a23]]

B = [[b11 b12 b13]
     [b21 b22 b23]
     [b31 b32 b33]]

# The product "A*B" would result in a matrix C such as

C = [[[a11*b11  a12*b12  a13*b13]
      [a11*b21  a12*b22  a13*b23]
      [a11*b31  a12*b32  a13*b33]]

     [[a21*b11  a22*b12  a23*b13]
      [a21*b21  a22*b22  a23*b23]
      [a21*b31  a22*b32  a23*b33]]]

# Which is equivalent to (in numpy notation)

 C[0] = A[0]*B
 C[1] = A[1]*B

Дело в том, что размеры являются произвольными (поэтому не только 2x3 и 3x3 , конечно, вторые измерения всегда совместимы), я ищу решение без "для петель". Я попытался, например, повторить массив B, а затем умножить

B = numpy.repeat(B[nu.newaxis,:,:],2,axis=0)
C = A*B

# operands could not be broadcast together with shapes (2,5) (2,3,5)

Но новые измерения не совместимы.

1 Ответ

3 голосов
/ 09 января 2020

Я думаю, это то, что вы ищете:

C = A[:, None] * B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...