用于生成标量的数学点积的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.

在下面的例子中,数学点积使用什么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.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. ]]])