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

如何将2D张量重塑为1D?以及如何实现指定2D张量到目标张量的转换?

嘿,我来帮你搞定这两个PyTorch张量操作的问题,直接上干货:

问题1:将2D张量重塑为1D张量

在PyTorch里有几种简单高效的方式,按需选择就行:

  • 用flatten()方法:最直观的方案,不管张量在内存中是否连续都能直接用,一步把所有维度压成1D:

    import torch
    # 示例2D张量
    two_d_tensor = torch.tensor([[1,2],[3,4],[5,6]])
    # 转成1D张量
    one_d_tensor = two_d_tensor.flatten()
    # 输出结果:tensor([1, 2, 3, 4, 5, 6])
    
  • 用view()方法:如果你的张量在内存中是连续存储的,这个方法效率最高——它只是改变张量的视图,不会复制数据:

    one_d_tensor = two_d_tensor.view(-1)
    # 这里的-1表示让PyTorch自动计算该维度的大小
    
  • 用reshape()方法:兼容性最强的方案,它会先判断张量是否连续,连续就用view()的逻辑,不连续就先整理成连续张量再重塑,不用担心报错:

    one_d_tensor = two_d_tensor.reshape(-1)
    
问题2:将特定2D张量转换为目标格式

观察你的输入和输出,核心是把每一行的两个元素当作十位和个位组合成整数,再转成列向量格式。直接用张量的元素运算就能实现:

import torch
# 你的输入张量
input_tensor = torch.tensor([[0, 5], [1, 4], [2, 2], [4, 2], [7, 9], [2, 0]])

# 第一步:计算每行的组合数值:十位元素*10 + 个位元素
combined_values = input_tensor[:, 0] * 10 + input_tensor[:, 1]
# 第二步:增加一个维度,把1D张量转换成(6,1)的列向量格式
output_tensor = combined_values.unsqueeze(1)

print(output_tensor)
# 输出结果:tensor([[ 5],
#               [14],
#               [22],
#               [42],
#               [79],
#               [20]])

也可以把两步合并成一行代码:

output_tensor = (input_tensor[:, 0] * 10 + input_tensor[:, 1]).unsqueeze(1)

这里input_tensor[:, 0]是提取所有行的第一个元素(十位),乘10后加上第二个元素(个位)得到1D数值张量,再用unsqueeze(1)在列维度增加一个维度,就得到了你要的目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:58:13