pytorch矩阵操作

pytorch矩阵操作

文章目录

  • pytorch矩阵操作
    • 拼接
      • torch.stack
    • 分割
      • torch.split
      • torch.chunk
    • 生成另外的矩阵
      • torch.meshgrid
    • 限制数据范围
      • torch.clamp
    • 维度变换
      • torch.transpose
    • 转化为内存连续的矩阵
      • torch.contiguous
    • tensor复制
      • tensor.clone()
      • tensor.detach()
      • tensor.clone().detach()
      • tensor.new_tensor(data, **kwargs)
      • tensor.copy_()
    • 补充说明

在日常工作中遇到了很多好用的pytorch矩阵操作,记录一下避免忘记,防止日后工作中重复造轮子。

本帖将不断更新

拼接

torch.stack

output = torch.stack(tensors: Union[Tuple[Tensor, ...], List[Tensor]], dim: _int=0)
将多个tensor在某一维度拼接,会增加一个维度。

分割

torch.split

torch.split(tensor, split_size_or_sections, dim=0)

split_size_or_sections: 分割出tensor在对应维度的尺寸

torch.chunk

torch.chunk(input, chunks, dim=0) → List of Tensors

chunks: 想分割出的tensor数目

生成另外的矩阵

torch.meshgrid

x1 ,y1 = torch.meshgrid(x,y)
生成网格,可以用于生成坐标。函数输入两个数据类型相同的一维张量,两个输出张量的行数为第一个输入张量的元素个数,列数为第二个输入张量的元素个数,当两个输入张量数据类型不同或维度不是一维时会报错。
x1x复制结果,y1y的复制结果。
例如x=[1,2], y=[3,4],则x1=[[1,2], [1,2]], y1=[[3,3], [4,4]]。

限制数据范围

torch.clamp

output = torch.clamp(input, min, max, out=None)
将输入数据压缩在min~max范围内,即
y i = { m i n , x i < m i n x i , m i n ≤ x i ≤ m a x m a x , x i > m a x y_i=\left\{ \begin{aligned} min, & & x_imax \end{aligned} \right. yi=min,xi,max,xi<minminximaxxi>max

维度变换

torch.transpose

torch.transpose(input, dim0, dim1, out=None) → Tensor

矩阵两个维度转换

x = x.transpose(0, 1)等价于x.transpose_(0, 1)

transpose不改变原数据,因此transposetensor会变成不连续的,transpose + view会报错

注:这里的连续是指tensor按行连续储存

转化为内存连续的矩阵

torch.contiguous

torch.contiguous()

将不连续的tensor转化为连续的tensor

transpose + view会报错,transpose+contiguous+view合法。

tensor复制

tensor.clone()

返回一个和源张量同shape、dtype和device的张量,与源张量不共享数据内存,但提供梯度的回溯。

tensor.detach()

返回一个和源张量同shape、dtype和device的张量,并且与源张量共享数据内存,但不提供梯度的回溯。

tensor.clone().detach()

只做简单的数据复制,既不数据共享,也不梯度共享,两个张量无关联。

tensor.new_tensor(data, **kwargs)

将函数参数中的数据data赋值给新的张量,提供了更细致的属性控制

**kwards=Nonetensor负责提供张量属性

否则优先从**kwards获得张亮属性,tensor提供属性补充

tensor.copy_()

会将b复制给a,同时改变a的requires_grad属性,但不改变device属性。

补充说明

pytorch中,一般来说如果对tensor的一个函数后加上了下划线,则表明这是一个in-place类型。in-place类型是指,当在一个tensor上操作了之后,是直接修改了这个tensor,而不是返回一个新的tensor并保留旧的tensor。

对tensor的一个函数后加上下划线,功能与原函数相同。

例如clamp_

你可能感兴趣的:(pytorch,深度学习,算法,python,pytorch,矩阵)