Pytorch入门4-Pytorch张量的计算
第二节:张量的计算
张量的计算,包括基本的四则运算、乘法运算和统计运算等。
一、基本计算
1加减乘除
要对张量进行加减乘除,可以使用运算符号:+、-、*、/,也可以使用对应的方法:add、sub、mul、div,以上这些方法是不会修改原张量的,如果想要原地修改原张量的值,那么可以使用对应下划线的版本:add_、sub_、mul_、div_。示例代码如下:
1 | # 1. 加号 |
PyTorch中的点积,也就是dot操作,只能针对一维的张量:
1 | t1 = torch.tensor([1,2]) |
如果想要对多维张量实现点积(内积),则需要先将多维张量拉平成一维张量,示例代码如下:
1 | t1 = torch.tensor([[1,2], [3,4]]) |
2异号
通过-号、neg以及neg_方法,可以将张量中的每个元素取异号。示例代码如下:
1 | # 1. 用负号 |
3幂运算
通过**、pow以及pow_方法让张量中的每个元素都进行幂运算。示例代码如下:
1 | # 1. 使用\*\* |
4求平方根
通过sqrt或sqrt_方法可以对张量中的每个元素求平方根。示例代码如下:
1 | # 1. 使用sqrt方法 |
5以e为底求幂
使用exp、exp_可以求以e为底的幂。示例代码如下:
1 | # 1. 使用exp方法 |
6求对数
通过log、log_可以求以e为底的对数。示例代码如下:
1 | tensor = torch.tensor([1,2,3], dtype=torch.float) |
另外pytorch还封装了以2为底的log2方法,以及以10为低的log10方法。如果想要以其他数为底,那么可以采用换底公式。
二、统计运算
统计运算,包括求最大值、最小值、平均值等。
1求最大(小)值
通过tensor.max或tensor.min()可以求出整个张量中的最大或最小的值。示例代码如下:
1 | tensor = torch.tensor([[1,20,3], [5,10,39]]) |
2求和
通过tensor.sum可以求得整个张量的和。示例代码如下:
1 | tensor = torch.tensor([[1.0,20,3], [5,10,39]]) |
3求平均值
通过tensor.mean可以求得整个张量的平均值。示例代码如下:
1 | tensor = torch.tensor([[1.0,20,3], [5,10,39]]) |
张量类型必须是浮点类型或复数类型才能够求平均值,所以如果张量是其他类型,比如整形,那么需要先转换为浮点型后再求平均值。示例代码如下:
1 | t1 = torch.tensor([[1,2], [3,4]]) |
4求最大(小)值索引
通过tensor.argmax和tensor.argmin可以求得最大值和最小值的索引。示例代码如下:
1 | tensor = torch.tensor([[1.0,20,3], [5,10,39]]) |
5求标准差
通过tensor.std可以求得张量中的标准差。示例代码如下:
1 | # 1. 求张量中所有元素的标准差 |
只有浮点类型或复数类型的张量才能够求标准差,否则会报错。示例代码如下:
1 | t1 = torch.tensor([[1,2], [3,4]]) |
6去重
通过tensor.unique可以对张量的元素去重。示例代码如下:
1 | tensor = torch.tensor([[1, 1], [2, 2]]) |
7排序
通过tensor.sort方法可以对张量元素进行排序。示例代码如下:
1 | tensor = torch.tensor([[1.0,20,3], [5,10,39]]) |
三、矩阵乘法
由于在PyTorch开发中,大部分的计算都是二维矩阵的计算。所以这里我们分二维矩阵和多维矩阵运算来讲解矩阵的乘法。可以使用tensor.mm、@符号或matmul来进行矩阵相乘,其中mm方法是只能用于二维矩阵的相乘,而@、matmul可以用于多维矩阵相乘。
1二维矩阵相乘
二维矩阵乘法示例代码如下:
1 | tensor1 = torch.tensor([[1,2,3], [4,5,6]]) |
2多维矩阵相乘
多维矩阵相乘,需要满足以下两个条件:
●末尾两个维度需要满足相乘的条件,比如A矩阵末尾两个维度为:m x s,B矩阵末尾两个维度为:s x n,那么就可以相乘。
●除了末尾两个维度,其余维度必须相同,或其中有一个矩阵的维度值为1,或少一个维度。比如以下三种情况:
○A矩阵(2,3,2),B矩阵(2,2,3),可以相乘,结果形状为(2,3,3)。
○A矩阵(2,3,2),B矩阵(1,2,3),可以相乘,结果形状为(2,3,3)。
○A矩阵(2,3,2),B矩阵(2,3),可以相乘,结果形状为(2,3,3)。
○A矩阵(2,3,2),B矩阵(3,2,3),不可以相乘。
相乘的规则为:末尾两个维度的矩阵按照二维矩阵进行相乘,其余维度进行广播(上述第二种情况,B矩阵的第0维为1,这时候A @ B会进行广播操作)。示例代码如下:
1 | # 第一个矩阵 |
1 | #结果 |
Pytorch入门4-Pytorch张量的计算

