宝塔山 发表于 2025-1-9 21:51:08

pytorch张量列表索引和多维度张量索引比较

pytorch张量的高级索引取值原明白读
代码:

import torch
x = torch.tensor([, ])
x1 = x[[, ]]

x2 = x, ])]
print(f"x1:{x1}")
print(f"x2:{x2}") 输出:
x1:tensor()
x2:tensor([[,
         ],

      [,
         ]]) 代码解读:

张量 x是一个 2x3 的张量:
x1 的取值
x1 = x[[, ]]


[*] 索引机制: 这里的索引 [, ] 是 高级整数索引。

[*]它取的是第 1 维的具体位置。

[*] 步骤:

[*]x[, ] 等价于以下操纵:

[*]x -> 20
[*]x -> 40


因此:
x1 =
        注:x[[, ]] 效果同 x[, ]
x2 的取值
x2 = x, ])]

### 复杂索引,在0维和1维度都取
#x3 = x, ]),torch.tensor([, ])]
#print(f"x3:{x3}")

#x 3:tensor([,
#      ])

#print(f"x3.shape:{x3.shape}")   # x3.shape:torch.Size()



[*] 索引机制: 这里的索引 torch.tensor([, ]) 是 多维整形张量索引。

[*]这种索引会在第 0 维上按张量的外形举行广播。

[*] 广播行为:

[*]索引张量的外形是 (2, 2)。
[*]PyTorch 会沿第 0 维取出对应的行,并按照索引效果重新分列。

[*] 步骤:

[*]x -> 
[*]x -> 
根据索引张量 [, ],效果分列为:

[[,# 对应索引 (0, 0)
], # 对应索引 (0, 1)

[,# 对应索引 (1, 0)
]] # 对应索引 (1, 1)
总结:



[*]x1 使用的是高级整数索引,按指定的具体位置取值(减少维度)。
[*]x2 使用的是多维张量索引,按张量外形广播,天生一个更高维的效果(不减少维度)。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: pytorch张量列表索引和多维度张量索引比较