· ☕ 1 min read
アインシュタインの縮約記法 テンソル積を書くと大量の $\Sigma$が出てきてうざい なので, $\Sigma$を省略しよう, というのが事の始まり $\sum_{j} a_{i,j}b_{j,k}$ なら ij,jk → ik プログラム的に考えれば, 単純にfor を外しただけ 例えば ドット積 z[i,j](https://scrapbox.io/yuwd/i%2Cj) += x[i,j](https://scrapbox.io/yuwd/i%2Cj) * y[i,j](https://scrapbox.io/yuwd/i%2Cj) np.einsum("ij,ij->ij", x, y) 内積 z[j,k](https://scrapbox.io/yuwd/j%2Ck) += x[j,i](https://scrapbox.io/yuwd/j%2Ci) * y[i,k](https://scrapbox.io/yuwd/i%2Ck) np.einsum("ji,ik->jk", x, y) 軸の入れ替えなどでも使える y = torch.einsum('nchw->nhwc', y).detach().cpu() 実際は遅いからやめたほうが良さそう ...