Pytorch的tensor基本操作

目录

一、tensor的创建

1.使用tensor

2.使用Tensor

3.随机初始化

4.其他数据生成

①torch.full

②torch.arange

③linspace和logspace

④ones, zeros, eye

⑤torch.randperm

二、tensor的索引与切片

1.索引与切片使用方法

①index_select

②...

③mask

三、tensor维度的变换

1.维度变换

①torch.view

②squeeze/unsqueeze

③expand,repeat

④t,transpose,permute


一、tensor的创建

1.使用tensor

小写字母的tensor接收具体的数据,可以直接按照numpy的方式输入数组。

2.使用Tensor

大写字母的可以接收形状,此时会生成随机数,但没有任何规则。可以生成不同的类型。

自动生成的数据有默认类型,FloatTensor,可以使用torch.set_default_tensor_type去修改

3.随机初始化

rand:0-1之间均匀采样

randn:均值0,方差1的正态分布随机采样

以上两种可以直接输入形状,即可产生对应形状的随机数。

randint:参数是---起始值、终止值、形状

同时每一个都会有一个_like方法,输入一个tensor,会生成对应形状的新tensor

4.其他数据生成

①torch.full

参数是---形状,数据。如果形状的位置给一个空的list,生成的就是标量。

 

②torch.arange

参数是---起始,终止,步长。不包含终止值。

③linspace和logspace

参数是---起始,终止,数量。包含终止值

 

④ones, zeros, eye

输入形状即可。ones和zeros也有_like方法 

⑤torch.randperm

随机打散。输入一个数字,会自动生成这个数字长度的,从0开始的随机排列数字,可以作为索引。当需要对不同的数据,使用相同的索引,并且打乱顺序时,非常好用。

 

二、tensor的索引与切片

1.索引与切片使用方法

和python中的索引切片使用方法一致

①index_select

输入的参数---维度的位置、要选的内容对应的维度的索引。不太好理解,可以看下面的例子。

 

②...

三个点相当于集成了的连续的冒号。

③mask

需要先根据数据生成一个mask,比如挑选出大于等于0.3的数,此时会得到一个和数据相同形状的,满足条件位置是1,不满足条件的位置是0的一个mask,通过masked_select可以选出数据。

 

 

三、tensor维度的变换

1.维度变换

①torch.view

和numpy中的reshape方法一样。转换的时候需要考虑到实际的物理意义。

②squeeze/unsqueeze

squeeze输入的参数---需要减少的维度所在位置

unsqueeze输入的参数---需要增加的维度所在的位置

 

③expand,repeat

expand输入的参数---希望扩展后所形成的维度

repeat输入的参数---各自维度需要重复的次数

通常使用expand,因为不会主动复制数据。

④t,transpose,permute

t:和numpy中的转置一样,只针对二维矩阵操作

transpose:输入需要交换的维度的位置即可。但想要还原的时候,需记得转换后的各个位置的物理意义,根据实际意义进行再次转换。见下面的例子。

permute:输入希望转换成的维度的位置索引即可。相当于多次使用transpose

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PyTorch中的tensor切片是指从一个tensor中选择特定的元素或子集。切片操作可以通过索引或范围来指定。下面是关于PyTorch tensor切片的一些重要信息: 1.基本切片操作:您可以使用索引操作符[]来对tensor进行切片。例如,如果有一个3x3的tensor,可以使用`tensor[1:3, 0:2]`来获得第二行和第三行的前两列。 2.索引规则:切片操作的索引是从0开始的。在切片时,起始索引是包含在切片中的,而结束索引是不包含在切片中的。例如,`tensor[1:3]`将返回索引为1和2的元素,但不包括索引为3的元素。 3.负数索引:您可以使用负数索引来从后面开始对tensor进行切片。例如,`tensor[-1]`将返回最后一个元素。 4.步长操作:您可以使用步长操作来跳过某些元素进行切片。例如,`tensor[0:3:2]`将返回索引为0和2的元素。 5.高维tensor切片:对于高维tensor,您可以在多个维度上进行切片。例如,`tensor[:, 1]`将返回所有行的第二列。 6.更改切片:切片的结果是原始tensor的视图,并且共享相同的内存。因此,对切片的更改将反映在原始tensor上。 7.使用切片进行赋值:您可以使用切片操作来对tensor的某些元素进行赋值。例如,`tensor[1:3, 0:2] = 0`将第二行和第三行的前两列设置为0。 请注意,这只是关于PyTorch tensor切片的一些基本信息,更复杂的操作如高级索引和掩码索引等也是可行的。 ### 回答2: PyTorch中的tensor切片是指从一个tensor中选择部分元素的操作。通过切片操作,我们可以访问或修改tensor中的特定元素,或者创建一个新的tensor来存储所选元素。 切片操作的基本语法是t[start:stop:step],其中start表示起始位置,stop表示结束位置(但不包括该位置上的元素),step表示步长。 例如,如果有一个1维tensor t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我们可以使用切片操作来选择其中的一部分元素。 - t[2:6]将返回一个新的tensor,包含元素2, 3, 4, 5; - t[:5]将返回一个新的tensor,包含元素0, 1, 2, 3, 4; - t[5:]将返回一个新的tensor,包含元素5, 6, 7, 8, 9; - t[1:8:2]将返回一个新的tensor,包含元素1, 3, 5, 7。 对于多维tensor,我们可以使用相同的切片操作来选择各个维度上的元素。 例如,如果有一个2维tensor t = [[0, 1, 2], [3, 4, 5], [6, 7, 8]],我们可以使用切片操作来选择其中的一部分元素。 - t[1:3, :2]将返回一个新的tensor,包含元素[[3, 4], [6, 7]],表示选择第1行和第2行的前2列; - t[:, 1]将返回一个新的tensor,包含元素[1, 4, 7],表示选择所有行的第1列。 需要注意的是,切片操作返回的是原始tensor的一个视图,而不是创建一个新的tensor。这意味着对切片后的tensor进行修改,将会影响到原始tensor。如果需要创建一个新的tensor对象,可以使用切片操作的clone()方法来复制原始tensor的数据。 ### 回答3: PyTorch是一个常用的深度学习框架,TensorPyTorch中用于处理数据的基本数据结构。在PyTorch中,我们可以使用Tensor进行切片操作来选择或修改我们需要的元素。 通过索引操作,我们可以对Tensor进行切片。在切片操作中,可以使用逗号分隔的索引列表来选择多个维度的元素。例如,使用tensor[a:b, c:d]的切片操作,可以选择Tensor中从第a行到第b行(不包括b)以及第c列到第d列(不包括d)的元素。 在切片操作中,索引的开始和结束位置都是可选的,如果不指定,则默认为从开头到末尾。此外,还可以使用负数索引来表示从末尾开始的位置。 除了使用切片进行选择之外,我们还可以使用切片进行修改。通过将切片操作放在赋值语句的左侧,我们可以将新的值赋予切片所选择的元素。 值得注意的是,切片操作返回的是原始Tensor的视图,而不是复制。这意味着对切片的修改也会反映在原始Tensor上。 需要注意的是,在PyTorch中进行切片操作不会对Tensor进行内存复制,这样可以减少内存消耗并提高代码的执行效率。 总而言之,PyTorch中的Tensor切片操作允许我们根据需要选择或修改Tensor中的元素。通过索引和切片操作,我们可以根据具体需求灵活操作Tensor的数据。这为我们在深度学习任务中提供了丰富的选择和便利性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值