pytorch - PyTorch 中的批量 index_fill
问题描述
我有一个 size 的索引张量(2, 3)
:
>>> index = torch.empty(6).random_(0,8).view(2,3)
tensor([[6., 3., 2.],
[3., 4., 7.]])
和一个 size 的值张量(2, 8)
:
>>> value = torch.zeros(2,8)
tensor([[0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0.]])
我想通过索引设置元素value
。1
**dim=-1
输出应该是这样的:
>>> output
tensor([[0., 0., 1., 1., 0., 0., 1., 0.],
[0., 0., 0., 1., 1., 0., 0., 1.]])
我试过value[range(2), index] = 1
了,但它触发了一个错误。我也试过torch.index_fill
,但它不接受批量索引。torch.scatter
需要创建一个大小为 的额外张量2*8
,1
这会消耗不必要的内存和时间。
解决方案
您实际上可以torch.Tensor.scatter_
通过设置value
( int ) 选项而不是src
选项 ( Tensor ) 来使用。
>>> value.scatter_(dim=-1, index=index.long(), value=1)
>>> value
tensor([[0., 0., 1., 1., 0., 0., 1., 0.],
[0., 0., 0., 1., 1., 0., 0., 1.]])
确保它index
是int64类型。
推荐阅读
- javascript - 从 JS FormData 在 PHP 端从 PUT 和 DELETE 获取数据
- python - 死代理错误的 Python 响应处理
- python - 无法使用 sphinx 为嵌套的 python 模块生成 html 文档
- docker - docker-compose -p up 在 docker compose 中替代
- javascript - Chessboardjs 设置有效,但棋子不会“掉落”
- active-directory - 不会为从 Microsoft Active Directory Server 到 Apache Directory Studio 的用户填充字段
- azure-cosmosdb - 获取多个属性 CosmosDB 的最大值
- javascript - 使用 NodeJS 以编程方式将图像发布到 Strapi
- typescript - jest-mock-extended - 使用对象输入调用模拟 [Typescript]
- c - 文件处理问题求助!我不能让这个函数运行来编辑二进制 .txt 文件中的结构