如何对具有以下形状的张量进行元素乘法?此处的第二个数组始终假定为2D。

[x, y, ?, ?, ?, ...] * [x, y]


我想播放标记为?的所有尺寸,其中我不知道数字a-priori。我考虑过的可能解决方案(但不知道如何做):


将可变数量的轴添加到第二个数组
反转两个数组的轴顺序,然后再次反转


任何指针都很棒。

最佳答案

假设输入数组是AB,其中B作为2D数组。首先,将A整形为3D数组,将尾随的不匹配维合并为一个维,然后使用B进行广播的逐元素乘法,最后将乘积重新整形为A的原始形状。实现看起来像这样-

shp = A.shape  # Get shape of A
out = (A.reshape(shp[0],shp[1],-1)*B[:,:,None]).reshape(shp)


验证输出-

In [96]: A = np.random.rand(2,3,4,5,7,8,4)

In [97]: B = np.random.rand(2,3)

In [98]: shp = A.shape
    ...: out = (A.reshape(shp[0],shp[1],-1)*B[:,:,None]).reshape(shp)
    ...:

In [99]: direct_out = A*B[:,:,None,None,None,None,None]

In [100]: np.allclose(out,direct_out) # Verify
Out[100]: True

关于python - 未知维张量的元素乘法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33801700/

10-11 20:44