如何将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
相关产品推荐
相关产品推荐

