对于Tensor数据类型而言,有的时候,我们需要改变向量的形状,以满足计算要求
例如:向量的变形、转置、压缩、解压等,属于基本的向量维度变换操作
下面将对向量的维度变换操作进行介绍
【reshape()】
在numpy中就有reshape方法,用于对数组进行变形
paddle中沿用了这个方法名,可以达到类似的效果
import paddle
a=paddle.arange(1,7)
b=paddle.reshape(a,(2,3))
print(a)
print(b)
reshape的第一个参数为原向量,第二个参数为一个元组,它描述了新向量的形状
注意元组的元素总数要与原向量一致
【unsqueeze()】
unsqueeze()方法将对向量进行维度扩充,在指定的轴增加一个维度
import paddle
a=paddle.rand((3,4))
b=paddle.unsqueeze(a,axis=0)
print(a.shape)
print(b.shape)
原向量的形状为(3,4)
我们这里给他在0轴增加了一个维度,从一个二维向量变成了一个三维向量
【squeeze()】
squeeze()方法与unsqueeze()方法正好相反,它的作用是减少一个维度
但要注意,被删除的维度尺寸必须为1
import paddle
a=paddle.rand((3,1,4))
b=paddle.squeeze(a,axis=1)
print(a.shape)
print(b.shape)
可以看到,squeeze()方法使用后,第1维消失了,向量从三维被降成了二维
【t()】
t()方法用于向量的转置
转置是一种改变向量维度顺序的操作,通常用于交换矩阵的行和列。
在数学上,转置操作将矩阵的行转换为列,列转换为行
import paddle
a=paddle.reshape(paddle.arange(1,13),(3,4))
b=paddle.t(a)
print(a)
print(b)
通过转置,原矩阵a从一个3*4矩阵变换成了4*3矩阵
并且每一行的元素被换到了每一列
即0轴和1轴进行了对调
【transpose()】
transpose()方法可以用于更加高维度的向量转置
import paddle
a=paddle.rand((2,3,4))
b=paddle.transpose(a,(2,0,1))
print(a.shape)
print(b.shape)
transpose()方法的第一个参数为原向量,第二个参数是一个元组,元组代表新向量的轴顺序
原本的(0,1,2)轴顺序被调换为了(2,0,1)
因此向量的形状也从(2,3,4)变成了(4,2,3)
【expand()】
`paddle.expand()是PaddlePaddle框架中的一个函数,用于将Tensor沿着指定的维度进行扩展。这个操作在不增加数据量的情况下,允许你改变Tensor的形状,使其在某些维度上具有更大的尺寸。这在处理不同形状的Tensor时非常有用,尤其是在广播机制中。
功能:paddle.expand 会将输入张量沿着某些维度复制多次,使其形状变为目标形状。
适用场景:当你需要将一个张量的形状扩展到更大的形状时,可以使用这个函数。
示例
假设你有一个形状为 [2, 1] 的张量
import paddle
x = paddle.to_tensor([[1], [2]])
expanded_x = paddle.expand(x, [2, 3])
print(x.shape)
print(expanded_x)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。