问题:
我有两组数据,分别为形状为 kxnxm 和 kxmxp 的A和B,分别为 k , m < / strong>和 p 可能很大,因此,我真的想对它们上的所有进程进行矢量化处理。
我想在这两个数据集之间形成点积,以使A中的每个 kth 元素与B中的每个 kth 元素相加(以形成< strong> kxnxp 矩阵,在第m轴上点)。乍一看,在我看来,它就像是hadamard产品和点产品的组合(因此有标题),但我想不出一种方法来获得理想的结果。
作为参考,由于无法使向量化正常工作,因此我目前正在这样运行它:
for b, w in zip(biasList, weightsList):
z = np.asarray([np.dot(weightMatrix,activation) for weightMatrix, activation in zip(w,activation)])
显然没有进行向量化,因此性能也很差。
使用numpy点或numpy einsum(如此处显示:vectorized/broadcasted Dot product of numpy arrays with different dimensions)并不能达到预期的效果,因为它们似乎只能带来形状为 kxnxm 和的矩阵kxmxp ,通过对一对索引求和,得出大小为 kxnxkxp 的矩阵,或者对两个索引求和,得出 nxp 。
是否有一种有效的矢量化方法?