You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用字典映射PyTorch张量中的元素值?

解决PyTorch张量元素按字典映射替换的问题

针对你提出的将张量中的数字按字典映射为对应字符的需求,这里提供两种实用方法:

方法1:列表推导式转换(兼容所有PyTorch版本)

由于PyTorch早期版本不支持字符串类型张量,最直接的方式是遍历张量元素,用字典完成映射:

import torch

num_to_char = {1: 'A', 2: 'B', 3: 'C'}
ex = torch.tensor([[1,2,3],[3,2,1]])

# 逐行逐元素映射
mapped_result = [[num_to_char[item.item()] for item in row] for row in ex]
print(mapped_result)
# 输出:[['A', 'B', 'C'], ['C', 'B', 'A']]

# 若需要类似张量的打印格式,可转为numpy数组
import numpy as np
print(np.array(mapped_result))
# 输出:
# [['A' 'B' 'C']
#  ['C' 'B' 'A']]

方法2:利用PyTorch字符串张量(PyTorch 1.12+)

如果你的PyTorch版本在1.12及以上,可以直接创建字符串类型的映射张量,通过索引完成批量替换:

import torch

num_to_char = {1: 'A', 2: 'B', 3: 'C'}
ex = torch.tensor([[1,2,3],[3,2,1]])

# 创建映射张量,索引对应原数字减1(原数字1→索引0,对应'A')
mapping = torch.tensor(['A', 'B', 'C'], dtype=torch.str)
# 将原张量转为索引(原数字1-3对应索引0-2)
indices = ex - 1
# 批量映射
result_tensor = mapping[indices]
print(result_tensor)
# 输出:
# tensor([['A', 'B', 'C'],
#         ['C', 'B', 'A']], dtype=torch.str)

关于你之前尝试方法无效的原因

  • torch.where更适合基于条件的二元替换,多值映射需要多次嵌套判断,操作繁琐且易出错;
  • 论坛中的方法大多针对数值型张量的替换,而非字符串映射场景,因此不适用。

内容的提问来源于stack exchange,提问作者Ssong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:52:38