Pytorch的Tensor操作(1)

 

类型推断

torch.randn():随机初始化

a.type():返回类型

type():返回基本类型

isinstance() :检查类型

cuda会影响数据类型

标量

维度(dimention)为0的标量

标量的shape:

返回类型为【】(空的list),返回长度也为0

a.dimension()也为0

Dim1

torch.tensor() : 输入具体数据

torch.FloatTensor() :输入类型大小

Dim1的shape

Dim2

Dim3

Dim4(一般用于图像)


创建Tensor

import from numpy

从numpy转化为tensor类型, 数据类型(float)不变,变量类型(np→numpy)变了

生成未初始化tensor

设置默认类型

随机初始化

torch.rand() :随机采样【0,1】之间的数

torch.rand_like(a): 采样出与a相同类型的tensor

torch.randint(min,max,[type]):不包含最大值

正态分布随机初始化

torch.normal(mean,std): 自定义的正态分布,需要给出相同数量的均值和方差

重复填充

torch.full():类型为[]时,表示生成的为标量

范围

torch.arange():生成不包含最大值的等差数列

torch,linspace(min,max,steps= ):包含最大值,steps是切分后的数量

全1/零/单位矩阵

torch.eye():中如果不是方阵,多余部分为0

随机打散

torch.randperm(): 生成不包含最大值的索引

下面对第一维进行shufflerandperm中的参数必须与类型的第一维相同。abidx相同,防止匹配错误

下图表示,randperm中定义需要两个索引时,分别返回a b的对应索引值


切片和索引 

索引

取不到“ 的元素

-1表示最后一个元素

分段采样

出现两个“”表示的是:start :end :step(默认为1,为1可省略)

指定维度采样

... ”:表示同时取多个维度,只能全选或已知前后具体采样维度,剩下的全选,某一维度取“1”时,会自动降维

根据MASK选择

先根据条件,得到一定的掩码,根据满足条件的掩码值重新在原始数据中进行选择

铺展(Flatten)索引值


纬度变化

View Reshape

增维(Unsqueeze)

下面的a为标量,在第0维与第1维添加维度后,分别会变为[1,2] [2,1]

下面是bias向权重类型变化过程

降维(squeeze)

如果没有具体参数,将去除所有为“1”的维度

带有参数,将对对应维度进行去除

扩展(expand)

总维度必须相同,且只能从1维度扩展到指定维度或直接相同 

“-1”保持原来维度不变

重复(repeat)

与expand参数不同,每个维度的值表示对对应维度进行的重复次数。

矩阵转置(transpose)

下面两行函数说明,即使前后的总体数据类型的大小相同,但是相同维度所表示的意义也进行了交换,因此不再表示同一Tensor

permute

可以自动调用transpose,并保证维度顺序的顺利交换

 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值