且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

将一个数组的每一行与另一个数组的每个元素乘以numpy

更新时间:2021-11-23 23:53:39

使用 broadcasting -

A[:,None,:]*B[:,:,None]

由于 np.einsum 也支持广播,您也可以使用它(感谢@ajcr建议这个简洁的版本)-

Since np.einsum also supports broadcasting, you can use that as well (thanks to @ajcr for suggesting this concise version) -

np.einsum('ij,ik->ikj',A,B)

样品运行-

In [22]: A
Out[22]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])

In [23]: B
Out[23]: 
array([[10, 20],
       [30, 40],
       [50, 60]])

In [24]: A[:,None,:]*B[:,:,None]
Out[24]: 
array([[[ 10,  10,  10],
        [ 20,  20,  20]],

       [[ 60,  60,  60],
        [ 80,  80,  80]],

       [[150, 150, 150],
        [180, 180, 180]]])

In [25]: np.einsum('ijk,ij->ijk',A[:,None,:],B)
Out[25]: 
array([[[ 10,  10,  10],
        [ 20,  20,  20]],

       [[ 60,  60,  60],
        [ 80,  80,  80]],

       [[150, 150, 150],
        [180, 180, 180]]])