龙空技术网

pytorch的切片操作和原地赋值

长颈鹿睡觉 104

前言:

此刻同学们对“python列表切片赋值”大概比较关心,各位老铁们都想要知道一些“python列表切片赋值”的相关文章。那么小编同时在网上汇集了一些关于“python列表切片赋值””的相关文章,希望你们能喜欢,你们一起来了解一下吧!

切片

与python的数组操作类似,pytorch的张量也支持切片操作。

构建一个4行5列的二维数组。

import torchx = torch.arange(20).reshape(4,5)

通过切片取出前2行的数据。

x[0:2]

也可以通过切片操作给张量赋值。

给第一行的数据赋值为0

x[0:1,:]=0

原地赋值

张量在运算的过程中会申请新的内存地址,即使是同一个张量。

先来看个例子。

先构建2个张量x,y

x=torch.tensor([1])y=torch.tensor([2])

使用函数查看张量x的内存地址为:2182261278336

将x与y相加,重新赋值给x,再查看下x的内存地址:2182257581408

可以看到前后2次查询的内存地址是不一样的,在运算过程中申请了新的内存空间,这会导致运算开销变大。

可以使用切片操作,使用原有的内存空间。

x=torch.tensor([1])y=torch.tensor([2])id(x)x[:]=x+yid(x)

再次查看运算前后的内存地址,这次就一样了,说明没有申请新的内存空间。

除了使用切片减少内存空间也可以使用+=操作。

x=torch.tensor([1])y=torch.tensor([2])id(x)x+=yid(x)

标签: #python列表切片赋值