import torch
x = torch.randn(4, 6) # shape: (4,6)
# view 用法
y = x.view(3, 8) # shape: (3,8)
# reshape 用法
z = x.reshape(2, 12) # shape: (2,12)
# 使用 -1 自动推断某一维度
w = x.view(-1, 8) # 自动计算第一维为 3 (24/8=3)
注意:元素总数必须不变,否则抛出错误。
两者都用于改变张量的形状(不改变元素总数),但内部行为略有不同:
| 函数 | 连续性要求 | 内存行为 | 推荐场景 |
|---|---|---|---|
view |
要求张量连续(contiguous) | 返回视图,与原张量共享数据(零拷贝) | 确定内存连续时使用,最高效 |
reshape |
不要求连续 | 尽可能返回视图;若连续则等价于view,否则自动复制后再view |
通用、安全,不用操心连续性 |