如何获取torch.mode的输出索引?为何索引全为20?
关于torch.mode返回indices全为20的疑问解析
执行torch.mode(b, 0)后得到的indices结果全为20,以下是代码示例、官方文档说明及原因解析:
代码示例
>>> b tensor([[ 6, 7, 12, 7, 8], [ 0, 1, 6, 1, 2], [ 0, 1, 6, 1, 2], [ 2, 3, 8, 3, 4], [ 2, 3, 8, 3, 4], [ 2, 3, 8, 3, 4], [10, 11, 16, 11, 12], [-1, 0, 5, 0, 1], [-2, -1, 4, -1, 0], [ 2, 3, 8, 3, 4], [ 1, 2, 7, 2, 3], [ 1, 2, 7, 2, 3], [ 2, 3, 8, 3, 4], [ 5, 6, 11, 6, 7], [-2, -1, 4, -1, 0], [-3, -2, 3, -2, -1], [-5, -4, 1, -4, -3], [ 1, 2, 7, 2, 3], [12, 13, 18, 13, 14], [-3, -2, 3, -2, -1], [ 2, 3, 8, 3, 4], [ 3, 4, 9, 4, 5], [10, 11, 16, 11, 12], [-6, -5, 0, -5, -4], [ 9, 10, 15, 10, 11], [12, 13, 18, 13, 14], [-3, -2, 3, -2, -1], [-2, -1, 4, -1, 0], [-4, -3, 2, -3, -2], [-1, 0, 5, 0, 1], [ 2, 3, 8, 3, 4], [ 4, 5, 10, 5, 6], [-1, 0, 5, 0, 1], [ 5, 6, 11, 6, 7], [ 7, 8, 13, 8, 9], [ 3, 4, 9, 4, 5], [ 2, 3, 8, 3, 4], [ 4, 5, 10, 5, 6], [-4, -3, 2, -3, -2], [ 2, 3, 8, 3, 4], [-1, 0, 5, 0, 1], [ 2, 3, 8, 3, 4], [ 4, 5, 10, 5, 6], [ 9, 10, 15, 10, 11], [-1, 0, 5, 0, 1], [-4, -3, 2, -3, -2], [ 0, 1, 6, 1, 2], [ 4, 5, 10, 5, 6], [ 6, 7, 12, 7, 8], [-2, -1, 4, -1, 0]]) >>> torch.mode(b, 0) torch.return_types.mode( values=tensor([2, 3, 8, 3, 4]), indices=tensor([20, 20, 20, 20, 20]))
torch.mode官方文档(中文翻译)
torch.mode(input, dim=-1, keepdim=False, *, out=None)
返回一个命名元组(values, indices):
values:输入张量在指定维度dim上的众数indices:众数在原张量对应维度上的索引位置
默认dim为张量的最后一维。若keepdim设为True,输出张量除dim维度大小为1外,其余尺寸与输入一致;否则dim维度会被压缩,输出张量的维度比输入少1。
原因解析
这是PyTorch中torch.mode的正常行为:当某个维度上的众数存在多个出现位置时,函数会返回最后一次出现该众数的索引。
观察张量b:
- 第20行(索引从0开始)的元素是
[2, 3, 8, 3, 4] - 对每一列统计众数:
- 第0列:数字
2出现次数最多(共10次),最后一次出现在第20行 - 第1列:数字
3出现次数最多,最后一次出现在第20行 - 第2列:数字
8出现次数最多,最后一次出现在第20行 - 第3列:数字
3出现次数最多,最后一次出现在第20行 - 第4列:数字
4出现次数最多,最后一次出现在第20行
- 第0列:数字
因此所有列的indices都返回20,完全符合torch.mode的设计逻辑。
内容的提问来源于stack exchange,提问作者xiaoming
相关产品推荐
相关产品推荐

