要乘以标量数组的子矩阵数组
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.]]]]
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.]]]]