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

Python 要乘以标量数组的子矩阵数组,python,arrays,numpy,multidimensional-array,matrix-multiplication,Python,Arrays,Numpy,Multidimensional Array,Matrix Multiplication,A是一个10 x 10的标量数组,shape=(10,10) B是一个由3 x 3矩阵组成的10 x 10数组,形状=(10,10,3,3) A中有100个标量,B中有100个3X3矩阵。我希望B中的每个3X3矩阵都乘以A中相应的标量 我可以用这样一个简单的函数来实现: def C(i,j): return A[i,j]*B[i,j] 但我想知道是否可以使用更简单的numpy兼容表达式(无需新函数)来完成此操作。您可以向a添加新轴,然后与B相乘以获得所需结果: A[:, :, None,

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

B是一个由3 x 3矩阵组成的10 x 10数组,形状=(10,10,3,3)

A中有100个标量,B中有100个3X3矩阵。我希望B中的每个3X3矩阵都乘以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.]]]]

奥米加曼达:很高兴有帮助-如果你觉得你的问题已经得到答复,请考虑将答案标记为接受(或让我知道如果你想要任何进一步的解释)。实际上,我试着在我的评论后立即做,但它不断告诉我,我需要等待2分钟,所以我忘记了它。