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兼容表达式(没有新功能)来完成。
答案 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.]]]]