Python 要乘以标量数组的子矩阵数组
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中相应的标量 我可以用这样一个简单的函数来实现: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,
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分钟,所以我忘记了它。