首页 > 解决方案 > Pytorch(GPU)中(低秩块)对角线与向量的有效乘法

问题描述

我有向量vw长度,以及一个具有不同值的n整数向量x长度。(例如,)。nki_0i_{k-1}x = [0,0,3,6,6,0,5,3,3]

我想要的是向量y在哪里

y[x == i_j] = (v[x == i_j] @ w[x == i_j]) * w[x == i_j]

在某些情况下k会非常小,在某些情况下会几乎和n.

我想在使用 Pytorch 的 GPU 上快速完成这项工作,但我知道做蒙版v[x == i_j]很慢,尤其是在循环中完成 k 次时。

也许在一开始对 , , 应用相同的排列会有所帮助,这样v就可以排序了;那么这些和有问题的部分将是切片。并且排列可以在最后被撤消。wxxvw

在排序后的版本中,这相当于将向量乘以v块对角矩阵,其中块对角线中的每个块都是一个秩矩阵 - 切片的外积w。但是我仍然不知道如何在 O(n) 时间内做到这一点,而无需编写一个循环(这将消除 GPU 加速)。我应该使用哪些 pytorch 函数?

标签: performancepytorchgpulinear-algebra

解决方案


推荐阅读