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

如何将张量值集合转为列表并保留浮点精度与显示格式

问题

我有3组ID列表(sequence[i].id_column),打印时发现第二组列表的显示格式变成了科学计数法(比如4.2显示为4.2e+00)。我尝试把所有列表存入集合unique_values来获取唯一值,再转为张量并排序,但得到的unique_values_sorted还是科学计数法格式。想生成一个包含所有列表唯一值、且保持第一组id_column_tensor显示格式的列表。

原代码

unique_values = set()
np.set_printoptions(suppress=True)
torch.set_printoptions(precision=1)  
for i in range(start_timestep-1, start_timestep+ timestep-1):
   if sequence[i].x.size(0) > 0:
        
        id_column_tensor = torch.tensor(sequence[i].id_column, dtype=torch.float32)

        id_column_list = [float(f"{value:.4f}") if isinstance(value, float) else value for value in sequence[i].id_column]  #id_column_tensor
        unique_values.update(id_column_tensor)
        print('id_column_tensor:',id_column_tensor)
    else:
        raise ValueError(f"The tensor at sequence[{i}].x is empty.")
print('unique_values:',unique_values)
# Convert unique values to a tensor to get unique sorted values
unique_values_tensor = torch.tensor(list(unique_values))   #, dtype=torch.float32
unique_values_sorted = torch.unique(unique_values_tensor, sorted=True)

print('unique_values_sorted:', unique_values_sorted)   

原输出

id_column_tensor: tensor([  12.0,   13.0,   13.1,   13.2,   14.0,   14.1,   15.0,   15.1,   16.0,
          16.1,   16.2,   17.0,   17.1,   18.0,   18.1,   18.2,   19.0,   19.1,
        5001.0, 5004.0, 5008.0, 5010.0])
id_column_tensor: tensor([0.0e+00, 1.0e+00, 2.0e+00, 3.0e+00, 3.1e+00, 3.2e+00, 4.0e+00, 4.1e+00,
        4.2e+00, 5.0e+00, 5.1e+00, 6.0e+00, 6.1e+00, 6.2e+00, 7.0e+00, 7.1e+00,
        8.0e+00, 8.1e+00, 8.2e+00, 9.0e+00, 9.1e+00, 9.2e+00, 1.0e+01, 1.1e+01,
        1.1e+01, 1.1e+01, 1.2e+01, 1.2e+01, 1.3e+01, 1.3e+01, 1.4e+01, 5.0e+03,
        5.0e+03, 5.0e+03, 5.0e+03, 5.0e+03, 5.0e+03, 5.0e+03, 5.0e+03])
id_column_tensor: tensor([   5.1,    6.0,    6.1,    6.2,    7.0,    7.1,    8.0,    8.1,    8.2,
           9.0,    9.1,    9.2,   10.0,   11.0,   11.1,   11.2,   12.0,   12.1,
          13.0,   13.1,   13.2,   14.0,   14.1,   15.0,   15.1,   16.0,   16.1,
          16.2,   17.0,   17.1,   18.0,   18.1,   18.2,   19.0,   19.1, 5001.0,
        5004.0, 5006.0, 5007.0, 5008.0, 5009.0, 5010.0])
unique_values: {tensor(5001.), tensor(3.1), tensor(16.1), tensor(2.), tensor(4.1), tensor(10.), tensor(16.2), tensor(13.2), tensor(16.1), tensor(5004.), tensor(5005.), tensor(13.2), tensor(6.), tensor(19.), tensor(5009.), tensor(11.1), tensor(7.), tensor(13.1), tensor(17.), tensor(8.2), tensor(9.1), tensor(11.), tensor(18.1), tensor(5006.), tensor(14.), tensor(5008.), tensor(6.2), tensor(19.1), tensor(18.), tensor(14.), tensor(11.2), tensor(7.), tensor(13.1), tensor(8.1), tensor(9.), tensor(5.), tensor(11.1), tensor(9.), tensor(5007.), tensor(14.1), tensor(6.1), tensor(5001.), tensor(5008.), tensor(18.2), tensor(4.2), tensor(8.2), tensor(5001.), tensor(12.), tensor(9.2), tensor(17.1), tensor(6.2), tensor(11.2), tensor(9.1), tensor(13.), tensor(5008.), tensor(15.), tensor(5.1), tensor(6.), tensor(5.1), tensor(5004.), tensor(16.), tensor(17.), tensor(5002.), tensor(12.1), tensor(14.1), tensor(17.1), tensor(5010.), tensor(18.), tensor(12.), tensor(9.2), tensor(6.1), tensor(7.1), tensor(15.1), tensor(8.1), tensor(5006.), tensor(5010.), tensor(14.), tensor(19.), tensor(5003.), tensor(13.), tensor(18.1), tensor(12.1), tensor(10.), tensor(12.), tensor(16.2), tensor(16.), tensor(15.1), tensor(3.), tensor(3.2), tensor(8.), tensor(5007.), tensor(15.), tensor(0.), tensor(8.), tensor(5004.), tensor(13.1), tensor(7.1), tensor(19.1), tensor(4.), tensor(18.2), tensor(1.), tensor(13.), tensor(11.)}
unique_values_sorted: tensor([0.0e+00, 1.0e+00, 2.0e+00, 3.0e+00, 3.1e+00, 3.2e+00, 4.0e+00, 4.1e+00,
        4.2e+00, 5.0e+00, 5.1e+00, 6.0e+00, 6.1e+00, 6.2e+00, 7.0e+00, 7.1e+00,
        8.0e+00, 8.1e+00, 8.2e+00, 9.0e+00, 9.1e+00, 9.2e+00, 1.0e+01, 1.1e+01,
        1.1e+01, 1.1e+01, 1.2e+01, 1.2e+01, 1.3e+01, 1.3e+01, 1.3e+01, 1.4e+01,
        1.4e+01, 1.5e+01, 1.5e+01, 1.6e+01, 1.6e+01, 1.6e+01, 1.7e+01, 1.7e+01,
        1.8e+01, 1.8e+01, 1.8e+01, 1.9e+01, 1.9e+01, 5.0e+03, 5.0e+03, 5.0e+03,
        5.0e+03, 5.0e+03, 5.0e+03, 5.0e+03, 5.0e+03, 5.0e+03, 5.0e+03])
解决方案

直接修改PyTorch打印配置并调整集合存储逻辑即可解决问题,修改后的代码如下:

unique_values = set()
# 核心配置:禁用科学计数法,同时保留1位小数精度,和第一组显示格式一致
torch.set_printoptions(suppress=True, precision=1)  

for i in range(start_timestep-1, start_timestep + timestep - 1):
    if sequence[i].x.size(0) > 0:
        id_column_tensor = torch.tensor(sequence[i].id_column, dtype=torch.float32)
        # 提取张量中的数值存入集合,而非存储单个张量对象
        unique_values.update(id_column_tensor.numpy().tolist())
        print('id_column_tensor:', id_column_tensor)
    else:
        raise ValueError(f"sequence[{i}].x 张量为空")

# 转换为张量并去重排序,显式指定类型保证一致性
unique_values_tensor = torch.tensor(list(unique_values), dtype=torch.float32)
unique_values_sorted = torch.unique(unique_values_tensor, sorted=True)

print('unique_values_sorted:', unique_values_sorted)

关键修改说明

  1. 打印选项调整:torch.set_printoptions(suppress=True, precision=1) 强制禁用科学计数法,同时设置和第一组相同的小数精度,直接解决显示格式问题
  2. 集合存储逻辑优化:原代码把单个张量元素存入集合,导致集合里全是小张量对象;改为提取张量的数值列表存入集合,既保证唯一值的正确性,也避免后续转换的问题
  3. 类型统一:转换为张量时显式指定dtype=torch.float32,确保所有数值类型一致,避免潜在的格式转换异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:02:03