Pytorch的tensor基本操作

本文详细介绍了PyTorch中Tensor的创建方式,包括使用不同方法生成特定数据的Tensor,如随机初始化、固定值填充等;探讨了Tensor的索引与切片的使用技巧,以及如何通过多种方法改变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

### PyTorch Tensor 基本操作教程 #### 创建张量 在PyTorch中,可以通过多种方式创建张量。最简单的方式是直接从Python列表或其他序列化对象构建张量。 ```python import torch # 使用tensor函数创建不同维度的张量 scalar = torch.tensor(7.) # 创建0维张量 (标量) vector = torch.tensor([1., 2., 3.]) # 创建一维张量 (向量) matrix = torch.tensor([[1., 2.], [3., 4.]]) # 创建二维张量 (矩阵) print(f'Scalar: {scalar}') print(f'Vector: {vector}') print(f'Matrix:\n{matrix}') ``` 对于特定类型的张量,可以直接调用相应的构造器: ```python int_vector = torch.IntTensor([1, 2, 3]) float_matrix = torch.FloatTensor([[1.0, 2.0], [3.0, 4.0]]) double_tensor = torch.DoubleTensor([1.0]) print(int_vector.type()) # 输出张量的数据类型 print(float_matrix.type()) print(double_tensor.type()) ``` #### 数学运算 支持广泛的数学运算符,包括但不限于加减乘除幂次方根等常见算术运算。这里展示几个例子: ```python a = torch.randn((2, 3)) b = torch.ones_like(a) addition_result = a + b # 加法 multiplication_result = a * b # 逐元素相乘 reciprocal_result = torch.reciprocal(b) # 计算倒数[^3] print(addition_result) print(multiplication_result) print(reciprical_result) ``` #### 形状变换 调整张量大小或排列顺序是非常常见的需求之一,在PyTorch里这被称为视图(view),reshape 或 transpose 等方法都可以实现这一目的。 ```python original_tensor = torch.arange(start=0,end=9).view(-1,3) transposed_tensor = original_tensor.t() # 转置 reshaped_tensor = original_tensor.reshape((-1)) # 展平成一维数组 print('Original:') print(original_tensor) print('\nTransposed:') print(transposed_tensor) print('\nReshaped:') print(reshaped_tensor) ``` #### 默认数据类型设置 当不指定具体类型时,默认情况下会创建`FloatTensor`类型的张量。如果想要改变全局默认行为,则可通过如下命令完成配置。 ```python torch.set_default_tensor_type(torch.DoubleTensor) # 设置新的默认张量类型为DoubleTensor new_default_tensor = torch.tensor([1., 2.]) # 此处即使未显式指明也会按照新设定生成相应类型的实例 print(new_default_tensor.dtype) # 验证其实际类型确实已被更改为了双精度浮点数 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值