Tensor操作函数笔记:分割与合并

82 阅读2分钟
  • paddle.chunk(x, chunks, axis=0)
    • 将给定Tensor按照指定维度均匀分割为多个子Tensor
    • 参数
      • x 输入Tensor
      • chunks: 分割的数量
      • axis: 分割的维度(默认0)
    • 返回:包含Tensor的元祖
    • 注意:若张量尺寸不能被chunks整除,最后一个子张量尺寸会较小。
x = paddle.arange(12).reshape([3, 4])
# 沿列方向分割为2块
chunks = paddle.chunk(x, 2, axis=1)
print(chunks[0].shape)  # [3, 2]
print(chunks[1].shape)  # [3, 2]
  • paddle.split(x, num_or_sections, axis=0)
    • 功能:将Tensor指定维度分割成多个子Tensor
    • 参数
      • x:输入张量
      • num_or_sections 整数:均等分割的数量(同chunk)或者列表:各个子张量在axis上的尺寸
      • axis: 分割维度
    • 返回:子张量列表
# 方式1:均等分割
splits = paddle.split(x, 3, axis=0)  # 分割为3个[1,4]张量

# 方式2:自定义分割
splits = paddle.split(x, [1, 3], axis=1)  # 分割为[3,1]和[3,3]
  • paddle.concat(x, axis=0)
    • 功能:沿着指定维度连接多个张量
    • 参数:
      • x:张量列表或元祖
      • axis:链接维度(默认0)
    • 返回:连接后的张亮
    • 要求:除axis外,其他维度尺寸必须相同
a = paddle.ones([2, 3])
b = paddle.zeros([2, 3])
c = paddle.concat([a, b], axis=0)  # 形状[4, 3]
d = paddle.concat([a, b], axis=1)  # 形状[2, 6]
  • paddle.stack(x, axis=0)
    • 功能:沿新维度堆叠多个张量
    • 参数:
      • x: 张量列表
      • axis:新维度的插入位置
    • 返回:堆叠后的张亮(维度+1)
a = paddle.ones([2, 3])
b = paddle.zeros([2, 3])
c = paddle.stack([a, b], axis=0)  # 形状[2, 2, 3]
d = paddle.stack([a, b], axis=2)  # 形状[2, 3, 2]
  • paddle.unstack(x, axis=0)
    • 功能:stack的逆操作,沿指定维度拆解张量
    • 参数:
      • x:输入张量
      • axis: 拆解维度
    • 返回:张量列表(每个张量维度+1)
x = paddle.ones([2, 3, 4])
y = paddle.unstack(x, axis=1)  # 返回3个[2,4]张量

对比总结

函数核心功能输入要求输出维度变化
chunk均等分割张量需指定分割数量总维度不变,各块尺寸相近
split灵活分割张量可指定数量或各块尺寸总维度不变
concat沿现有维度连接张量axis外形状相同axis维度增加
stack沿新维度堆叠张量形状必须完全相同总维度 + 1
unstack沿指定维度拆解张量-总维度 - 1