微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用2d索引张量访问3D张量图像

如何解决使用2d索引张量访问3D张量图像

使用以下3D张量表示图像
img.shape=[H,W,F]
还有一个张量,代表该img的索引
indices.shape=[N,2]
例如。如果
indices = [[0,1],[5,3],...]] 我想创建一个new.shape=[N,F]形状的新张量,其中
new[k] == img[indices[k][0],indices[k][1]] 目前,为了解决这个问题,我将两个张量展平:

    idx_flattened = idx_flattened [:,0] * (idx_flattened [:,1].max()+1) + idx_flattened[:,1]
    img = img .reshape(-1,F)
    new = img[idx_flattened ]

但是我敢肯定有更好的方法:)

这是一个完整的最小示例:

img = torch.arange(8*10*3).reshape(8,10,3)
indices = torch.tensor([[0,0],[3,[1,2]])
new = img[indices] <- This does not work
new = [[  0,1,2],[ 90,91,92],[ 36,37,38]]

想法?

解决方法

切片会起作用

img[indices[:,0],indices[:,1]]
tensor([[ 0,1,2],[90,91,92],[36,37,38]])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。