要乘以标量数组的子矩阵数组

Array of submatrices to be multiplied by array of scalars

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

B 是 3 x 3 矩阵的 10 x 10 数组,形状 =(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 兼容表达式(没有新函数)来完成。

您可以向 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.]]]]