pytorch矩阵操作

pytorch矩阵操作

在日常工作中遇到了很多好用的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_i<min \\ x_i, & & min\leq x_i \leq max \\ max, & & x_i>max \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_

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值