python - 在 PyTorch 中屏蔽 3D 张量中的前 k 个元素(每行不同的 k)
问题描述
我有一个M
维度的张量[NxQxD]
和一个索引的一维张量idx
(大小N
)。我想有效地创建一个mask
维度[NxQxD]
的张量mask[i,j,k] = 1 iff j <= idx[i]
,即我只想将idx[i]
第一个维度保留Q
在第二个维度 (dim=1) 中M
,对于每一行i
。
谢谢!
解决方案
事实证明,这可以通过广播技巧来完成:
mask_2d = torch.arange(Q)[None, :] < idx[:, None] #(N,Q)
mask_3d = mask[..., None] #(N,Q,1)
masked = mask.float() * data
推荐阅读
- javascript - javascript 没有从 html 和 php 中获取所有值
- c++ - 用二进制模式和文本模式写一个字符串
- ruby - 当我运行 pod install 时,我收到无法找到 gem cocoapods 的消息。我该如何解决这个问题?
- python - 如何让python在linux上用管道读取tcpdump捕获的.pcap数据?
- python - 合并 Pandas DataFrame 的字典
- javascript - var 在 NodeJs 模块中属于哪个对象?
- c# - 如何将串联的数组值返回到标签?
- amp-html - 仅内容的 AMP 页面阅读进度
- android - Android 拍照缩略图代码不再工作?
- windows - 如何使用用户名预填充用户名字段?