我有以下四个张量

  • H(h,r)
  • A(a,r)
  • D(d,r)
  • T(a,t,r)

  • 对于i中的每个a,都有一个对应的T[i],其形状为(t, r)

    我需要执行np.einsum来产生以下结果(pred):
    pred = np.einsum('hr, ar, dr, tr ->hadt', H, A, D, T[0])
    for i in range(a):
        pred[:, i:i+1, :, :] = np.einsum('hr, ar, dr, tr ->HADT', H, A[i:i+1], D, T[i])
    

    但是,我想在不使用for循环的情况下进行此计算。原因是我使用的autograd目前不适用于项目分配!

    最佳答案

    一种方法是对T使用所有尺寸-

    np.einsum('Hr, Ar, Dr, ATr ->HADT', H, A, D, T)
    

    因为我们需要在所有输入上求和减少axis-r,同时将所有其他(轴)保留在输出中,所以我看不到任何中间方法,也没有引入任何基于点的工具来利用BLAS 。

    关于python - 向量化numpy.einsum,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47582442/

    10-12 16:45