要与标量数组相乘的子矩阵数组

时间:2015-11-17 22:34:38

标签: python arrays numpy multidimensional-array matrix-multiplication

A是一个10 x 10的标量数组,形状=(10,10)

B是一个10 x 10的3 x 3矩阵阵列,形状=(10,10,3,3)

A中有100个标量,B中有100个3 x 3矩阵。我希望B中的每个3 x 3矩阵乘以A中的相应标量。

我能用这样一个简单的函数做到这一点:

def C(i,j):
   return A[i,j]*B[i,j]

但我想知道是否可以使用更简单的numpy兼容表达式(没有新功能)来完成。

1 个答案:

答案 0 :(得分:2)

您可以将新轴添加到A,然后乘以B以获得所需的结果:

A[:, :, None, None] * B

这正确地对齐轴,使A中的每个标量与B中相应的3x3矩阵相乘。

示范的一个较小的例子:

>>> A = np.arange(1, 5).reshape(2, 2)
>>> B = np.ones((2, 2, 3, 3)
>>> A[:, :, None, None] * B
array([[[[ 1.,  1.,  1.],
         [ 1.,  1.,  1.],
         [ 1.,  1.,  1.]],

        [[ 2.,  2.,  2.],
         [ 2.,  2.,  2.],
         [ 2.,  2.,  2.]]],


       [[[ 3.,  3.,  3.],
         [ 3.,  3.,  3.],
         [ 3.,  3.,  3.]],

        [[ 4.,  4.,  4.],
         [ 4.,  4.,  4.],
         [ 4.,  4.,  4.]]]]