将两个2D numpy数组乘以3D数组

Tin*_*han 4 python arrays numpy multidimensional-array

我有两个二维numpy数组叫AB,这里AM x NBM x n.我的问题是我希望将每行每个元素B与相应的相乘,A并创建一个C大小的3D矩阵M x n x N,而不使用for-loops.

例如,如果A是:

A = np.array([[1, 2, 3],
              [4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)

并且B

B = np.array([[1, 2],
              [3, 4]])
Run Code Online (Sandbox Code Playgroud)

然后得到的乘法C = A x B看起来像

C = [
     [[1, 2],
      [12, 16]],
     [[2, 4],
      [15, 20]],
     [[3, 6],
      [18, 24]]
     ]
Run Code Online (Sandbox Code Playgroud)

是否清楚我想要实现的目标,是否可以在没有任何for-loops的情况下进行?最好的,tingis

yev*_*niy 6

C=np.einsum('ij,ik->jik',A,B)
Run Code Online (Sandbox Code Playgroud)

  • @yevgeniy关于更快,[这取决于阵列的大小](http://stackoverflow.com/a/30645430/832621).通常它对于较小的阵列更快,而对于较大的阵列,我测量的速度与使用`newaxis`的方法相当 (2认同)
  • @SaulloCastro.感谢您进行实际测试.我也跟着[这个](http://stackoverflow.com/questions/32083997/huge-speed-difference-in-numpy-between-similar-code),其中`einsum`真的表现出色,所以它似乎在数组大小> 10000是应该考虑替代解决方案的地方. (2认同)