将 3D 矩阵元素与 2D 矩阵的副本逐个元素高效乘法


我想将MxN 2D 矩阵(例如 A)的每个元素(例如 [i,j])乘以 3D

矩阵(例如 B)的 3D 行中的所有元素,因此B[i,j,:] .以下内容无济于事,因为它给了我一个(2,3,3)形状的矩阵而不是(3,3,2)。另外,我认为对于这样的乘法,制作副本是多余的。有没有更好的方法?

B=np.ones((3,3,2))
A=np.arange(1,10).reshape(3,3)
c=np.tile(A,(2,1,1))
print np.multiply(a,c)

我期望的输出是:

[[[1,1]],[[2,2]],[[3,3]],[[4,4]][[5,5]],[[6,6]],[[7,7]],[[8,8]],[[9,9]]]
如果

传递给array,您的预期输出(添加逗号后)将具有形状(9, 1, 2)。 假设这是一个错误,并且您确实想要具有这些值的形状(3,3,2)数组,那么我认为您需要做的就是扩展A

>>> A = np.arange(1,10).reshape(3,3)
>>> B = np.ones((3,3,2))
>>> C = A[..., None] * B
>>> C
array([[[ 1.,  1.],
        [ 2.,  2.],
        [ 3.,  3.]],
       [[ 4.,  4.],
        [ 5.,  5.],
        [ 6.,  6.]],
       [[ 7.,  7.],
        [ 8.,  8.],
        [ 9.,  9.]]])
>>> C.shape
(3, 3, 2)

最新更新