performance - Pytorch(GPU)中(低秩块)对角线与向量的有效乘法
问题描述
我有向量v
和w
长度,以及一个具有不同值的n
整数向量x
长度。(例如,)。n
k
i_0
i_{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
就可以排序了;那么这些和有问题的部分将是切片。并且排列可以在最后被撤消。w
x
x
v
w
在排序后的版本中,这相当于将向量乘以v
块对角矩阵,其中块对角线中的每个块都是一个秩矩阵 - 切片的外积w
。但是我仍然不知道如何在 O(n) 时间内做到这一点,而无需编写一个循环(这将消除 GPU 加速)。我应该使用哪些 pytorch 函数?
解决方案
推荐阅读
- java - Javax 验证不包括字段名称
- php - 如何在 PHP 中回显 SQL 行的位置编号?
- spring-boot - Spring Data JPA 分页 HHH000104
- c# - NLog - 如果消息以某些单词开头,则写入另一个目标
- javascript - javascript 切换单击在 addEventListener 中不起作用
- python - Python:读取目录中的所有文件以在while循环中观看
- amazon-web-services - 与 IoT Core 通信需要谁的访问密钥和密钥?
- excel - Excel js 加载项访问 Outlook/创建电子邮件
- php - 匹配确切的单词在php中的字符串中是否可用
- svg - 我可以在 Froala 中使用 Font-Awesome 而不更改为 svg