张量具备和Numpy相同的广播特性, 也就是允许不同形状张量之间进行计算
Same shapes are always broadcastable!
广播的特性是在不同形状的张量进行计算时,一个或者多个张量通过隐式转化, 转化成相同形状的两个张量, 从而完成计算的特性.
标量可以和任意形状的张量进行计算, 计算过程是标量和张量的每个元素进行计算
回顾张量的形状
两个张量形状不同,第一分量取值不同,但该分量上其中一个张量取值为1, 因此可以广播, 也就可以计算.
其中一个分量不为1
每个分量都不一样, 但其中有1
三维张量的广播
对于不同维度的张量,首先将低维的张量升维, 然后依据相同维度不同形状的张量广播规则进行广播. 而且低纬向量升维非常简单, 只需将更高维度方向的形状填充为1即可.
利用reshape升维
主要包括数学基本运算, 数值调整运算和数据科学运算三部分,相关函数如下:
函数 | 描述 |
---|---|
torch.add(t1,t2) | t1, t2两个张量逐个元素相加,等效t1+t2 |
torch.subtract(t1,t2) | t1, t2两个张量逐个元素相减,等效t1-t2 |
torch.multiply(t1,t2) | t1, t2两个张量逐个元素相乘,等效t1*t2 |
torch.divide(t1,t2) | t1, t2两个张量逐个元素相除,等效t1/t2 |
函数 | 描述 |
---|---|
torch.abs(t) | 返回绝对值 |
torch.ceil(t) | 向上取整 |
torch.floor(t) | 向下取整 |
torch.round(t) | 四舍五入取整 |
torch.neg(t) | 返回相反的数 |
以上并不会改变t的值,如果需要原对象本身进行修改,可以考虑方法_()的表达方式, 对对象本身进行修改.
除了上述数值调整函数有对应的同名方法,许多科学计算都有同名方法
很多张量的科学计算函数都不允许张量和python原生的数值型对象混合使用
tensor的大多数科学运算具有一定的静态性
所谓静态性, 指的是对输入的张量类型有明确的要求, 例如部分函数只能输入浮点型张量, 而不能输入整型张量.
排序运算 同时返回排序结果和对应的索引值的排列
规约运算指的是针对某张量进行某种总结,最后得出一个具体总结值的函数
统计分析函数 | 描述 |
---|---|
torch.mean(t) | 返回张量均值 |
torch.var(t) | 返回张量方差 |
torch.std(t) | 返回张量标准差 |
torch.var_mean(t) | 返回张量方差和均值 |
torch.std_mean(t) | 返回张量标准差和均值 |
torch.max(t) | 返回张量最大值 |
torch.argmax(t) | 返回张量最大值索引 |
torch.min(t) | 返回张量最小值 |
torch.argmin(t) | 返回张量最小值索引 |
torch.median(t) | 返回张量中位数 |
torch.sum(t) | 返回张量求和结果 |
torch.logsumexp(t) | 返回张量各元素求和结果,适用于数据量较小的情况 |
torch.prod(t) | 返回张量累乘结果 |
torch.dist(t1, t2) | 计算两个张量的闵式距离,可使用不同范式 |
torch.topk(t) | 返回t中最大的k个值对应的指标 |
disk计算距离
disk函数可以计算闵式距离(闵可夫斯基距离),通过输入不同的p值,可以计算多种类型的距离,如欧式距离,街道距离等.
公式如下:
规约运算的维度, 由于规约运算是一个序列返回一个结果,若是针对高维张量,则可指定某维度进行运算.
函数 | 描述 |
---|---|
torch.eq(t1,t2) | 比较t1,t2各元素是否相等,等效== |
torch.equal(t1,t2) | 判断两个张量是否是相同的张量 |
torch.gt(t1,t2) | 比较t1各元素是否大于t2各元素,等效> |
torch.lt(t1,t2) | 比较t1各元素是否小于于t2各元素,等效< |
torch.ge(t1,t2) | 比较t1各元素是否大于或等于t2各元素,等效>= |
torch.le(t1,t2) | 比较t1各元素是否小于或等于t2各元素,等效<= |
torch.ne(t1,t2) | 比较t1, t2各元素是否不相同,等效!= |