用于生成标量的数学点积的numpy函数 问题:
在下面的例子中,数学点积使用什么numpy函数用于生成标量的数学点积的numpy函数 问题:,numpy,dot-product,Numpy,Dot Product,在下面的例子中,数学点积使用什么numpy函数 定义样本(2,3)数组: 按元素乘法: In [301]: dldx*w Out[301]: array([[0. , 0.2, 0.6], [0. , 0. , 0. ]]) 最后一个轴(大小3)上的求和生成一个2元素数组: In [302]: (dldx*w).sum(axis=1) Out[302]: array([0.8, 0. ]) 您的(6)是第一项,删除0。有人可能会说,在(5)中使用点/内点有点草率 np.
In [301]: dldx*w
Out[301]:
array([[0. , 0.2, 0.6],
[0. , 0. , 0. ]])
最后一个轴(大小3)上的求和生成一个2元素数组:
In [302]: (dldx*w).sum(axis=1)
Out[302]: array([0.8, 0. ])
您的(6)是第一项,删除0。有人可能会说,在(5)中使用点/内点有点草率
np.einsum
借鉴了物理学的思想,物理学的维度可能更高。这种情况可以表示为
In [303]: np.einsum('ij,ik->i',dldx,w)
Out[303]: array([1.8, 0. ])
internal
和dot
进行我们想要的更多计算。我们只需要对角线:
In [304]: np.dot(dldx,w.T)
Out[304]:
array([[0.8, 0. ],
[2.6, 0. ]])
In [305]: np.inner(dldx,w)
Out[305]:
array([[0.8, 0. ],
[2.6, 0. ]])
在matmul/@
术语中,尺寸2维度是“批量”维度,因此我们必须添加维度:
In [306]: dldx[:,None,:]@w[:,:,None]
Out[306]:
array([[[0.8]],
[[0. ]]])
这是(2,1,1),所以我们需要挤出1。a(2,3)和a(3,2)的点产生a(2,2)。
In [306]: dldx[:,None,:]@w[:,:,None]
Out[306]:
array([[[0.8]],
[[0. ]]])