13,12_基本运算,add/minus/multiply/divide,矩阵相乘mm,matmul,pow/sqrt/rsqrt,exp/log近似值,统计属性,mean,sum,min,max
1.12.基本运算
1.12.1.add/minus/multiply/divide
1.12.2.矩阵相乘mm,matmul
1.12.3.pow/sqrt/rsqrt
1.12.4.exp/log
1.12.5.近似值floor、ceil、trunc、frac、round
1.12.6.现幅max、min、median、clamp
1.13.统计属性
1.13.1.norm
1.13.2.mean,sum,min,max,prod
1.13.3.max,argmin,argmax,topk,kthvalue
1.13.4.compare
1.12.基本运算
1.12.1.add/minus/multiply/divide
a + b = torch.add(a, b)
a - b = torch.sub(a, b)
a * b = torch.mul(a, b)
a / b = torch.div(a, b)
# -*- coding: UTF-8 -*-import torcha = torch.rand(3, 4)
b = torch.rand(4)
print(a)
"""
输出结果:
tensor([[0.8796, 0.9511, 0.1630, 0.0036],[0.4834, 0.2088, 0.3118, 0.7274],[0.8440, 0.3282, 0.4091, 0.4249]])
"""print(b)
"""
输出结果:
tensor([0.2553, 0.5917, 0.7143, 0.7302])
"""# 相加
# b会被广播
print(a + b)
"""
输出结果:
tensor([[1.1349, 1.5428, 0.8773, 0.7338],[0.7387, 0.8005, 1.0261, 1.4577],[1.0993, 0.9199, 1.1235, 1.1552]])
"""# 等价于上面相加
print(torch.add(a, b))
"""
输出结果:
tensor([[1.1349, 1.5428, 0.8773, 0.7338],[0.7387, 0.8005, 1.0261, 1.4577],[1.0993, 0.9199, 1.1235, 1.1552]])
"""# 比较两个是否相等
print(torch.all(torch.eq(a + b, torch.add(a, b))))
"""
输出结果:
torch.all判断是否所有元素都相等输出结果:
tensor(True)
"""
1.12.2.矩阵相乘mm,matmul
torch.mm(a, b) # 此方法只适用于2维
torch.matmul(a, b)
a @ b = torch.matmul(a, b) # 推荐使用此方法
用处:
降维:比如,[4, 784] @ [784, 512] = [4, 512]
大于2d的数据相乘:最后2个维度的数据相乘:[4, 3, 28, 64] @ [4, 3, 64, 32] = [4, 3, 28, 32]
前提是:除了最后两个维度满足相乘条件以外,其他维度要满足广播条件,比如此处的前面两个维度只能是[4, 3]和[4, 1]
# -*- coding: UTF-8 -*-import torcha = torch.randn(2, 3)
b = torch.randn(3, 2)
# 输出结果
print(a)
"""
输出结果:
tensor([[ 0.0935, -0.1704, 1.1908],[-0.2091, 0.0285, -0.5522]])
"""
print(b)
"""
输出结果:
tensor([[ 0.1315, -0.4669],[-0.1053, 0.9560],[ 0.0769, 0.9642]])
"""print(torch.mm(a, b))
"""
输出结果:
tensor([[ 0.1218, 0.9416],[-0.0730, -0.4076]])
"""
print(torch.matmul(a, b))
"""
输出结果:
tensor([[ 0.1218, 0.9416],[-0.0730, -0.4076]])
"""
1.12.3.pow/sqrt/rsqrt
# -*- coding: UTF-8 -*-import torcha = torch.full([2, 2], 3)
print(a)
"""
输出结果:
tensor([[3, 3],[3, 3]])
"""print(a.pow(2))
"""
输出结果:
tensor([[9, 9],[9, 9]])
"""aa = a ** 2
print(aa)
"""
输出结果:
tensor([[9, 9],[9, 9]])
"""## 平方根
print(aa ** (0.5))
"""
输出结果:
tensor([[3., 3.],[3., 3.]])
"""# 平方根
print(aa.pow(0.5))
"""
输出结果:
tensor([[3., 3.],[3., 3.]])
"""
1.12.4.exp/log
# -*- coding: UTF-8 -*-import torcha = torch.ones(2, 2)
print(a)
"""
输出结果:
tensor([[1., 1.],[1., 1.]])
"""# 自认底数e
print(torch.exp(a))
"""
输出结果:
tensor([[2.7183, 2.7183],[2.7183, 2.7183]])
"""# 对数
# 默认底数是e
# 可以更换为Log2、Log10
print(torch.log(a))
"""
输出结果:
tensor([[0., 0.],[0., 0.]])
"""
1.12.5.近似值floor、ceil、trunc、frac、round
a.floor() #向下取整
a.ceil() #向上取整
a.trunc() #保留整数部分:truncate,截取
a.frac() #保留小数部分:fraction, 小数
a.round() #四舍五入:round,大约
# -*- coding: UTF-8 -*-import torcha = torch.tensor(3.14)
print(a.floor(), a.ceil(), a.trunc(), a.frac())
"""
输出结果:
tensor(3.) tensor(4.) tensor(3.) tensor(0.1400)
"""a = torch.tensor(3.499)
print(a.round())
"""
输出结果:
tensor(3.)
"""a = torch.tensor(3.5)
print(a.round())
"""
输出结果:
tensor(4.)
"""
1.12.6.现幅max、min、median、clamp
a.max() # 最大值
a.min() # 最小值
a.median() # 中位数
a.clamp(10) #最小值限定为10 a.clamp(0, 10) #将数据限定在[0, 10],两边都是闭区间
# -*- coding: UTF-8 -*-import torchgrad = torch.rand(2, 3) * 15
print(grad)
"""
输出结果:
tensor([[ 4.7390, 7.9376, 12.8128],[12.1366, 1.4925, 9.5263]])
"""print(grad.max())
"""
输出结果:
tensor(12.8128)
"""print(grad.median())
"""
输出结果:
tensor(7.9376)
"""print(grad.clamp(10))
"""
输出结果:
tensor([[10.0000, 10.0000, 12.8128],[12.1366, 10.0000, 10.0000]])
"""print(grad.clamp(0, 10))
"""
输出结果:
tensor([[ 4.7390, 7.9376, 10.0000],[10.0000, 1.4925, 9.5263]])
"""
1.13.统计属性
1.13.1.norm
1.norm vs normalize and batch_norm是有区别的:norm是范数的意思,normalize、batch_norm是归一化
2.matrix norm和vector norm是有区别的
a = torch.full([8],1)
b = a.view(2,4)
c = a.view(2,2,2)
a.norm(1) # a tensor 的一范式
: tensor(8.)
b.norm(1)
: tensor(8.)
c.norm(1)
: tensor(8.)b.norm(2) # b tensor 的二范式
: tensor(2.8284)
b.norm(1,dim=1)
:tensor(4.,4.)
1.13.2.mean,sum,min,max,prod
对于argmin,argmax:如果不给出固定的dimension,会把tensor打平成dim=1,然后返回最小、最大的索引。
# -*- coding: UTF-8 -*-import torcha = torch.arange(8).view(2, 4).float()
print(a)
"""
输出结果:
tensor([[0., 1., 2., 3.],[4., 5., 6., 7.]])
"""print(a.min(), a.max(), a.mean(), a.prod(), a.sum(), a.argmin(), a.argmax())
"""
输出结果:
tensor(0.) tensor(7.) tensor(3.5000) tensor(0.) tensor(28.) tensor(0) tensor(7)
"""
1.13.3.max,argmin,argmax,topk,kthvalue
# -*- coding: UTF-8 -*-import torcha = torch.rand(4, 10)
print("----------------1---------------------")
print(a)
"""
输出结果:
tensor([[0.4550, 0.0754, 0.5295, 0.2976, 0.7861, 0.5620, 0.2705, 0.0929, 0.3207, 0.3191],[0.8027, 0.3193, 0.8842, 0.2734, 0.3881, 0.8242, 0.6090, 0.4655, 0.0993, 0.6304],[0.7399, 0.4701, 0.7231, 0.4278, 0.6317, 0.6905, 0.9834, 0.5210, 0.7772, 0.7630],[0.3206, 0.5491, 0.6806, 0.5545, 0.3620, 0.3515, 0.2682, 0.5013, 0.1984, 0.3038]])
"""print("----------------2---------------------")
print(a.max(dim=1))
"""
输出结果:
torch.return_types.max(
values=tensor([0.7861, 0.8842, 0.9834, 0.6806]),
indices=tensor([4, 2, 6, 2]))
"""print("----------------3---------------------")
print(a.argmax(dim=1))
"""
输出结果:
tensor([4, 2, 6, 2])
"""print("-----------------4--------------------")
print(a.max(dim=1, keepdim=True)) # 希望结果的维度(dim)和a保持一致
"""
输出结果:
torch.return_types.max(
values=tensor([[0.7861],[0.8842],[0.9834],[0.6806]]),
indices=tensor([[4],[2],[6],[2]]))
"""print("-----------------5--------------------")
print(a.argmax(dim=1, keepdim=True)) # 最大的值的维度,保持维度
"""
输出结果:
tensor([[4],[2],[6],[2]])
"""print("----------------6---------------------")
print(a.topk(3, dim=1)) # 每一维中的前3最大值,以及索引
"""
输出结果:
torch.return_types.topk(
values=tensor([[0.7861, 0.5620, 0.5295],[0.8842, 0.8242, 0.8027],[0.9834, 0.7772, 0.7630],[0.6806, 0.5545, 0.5491]]),
indices=tensor([[4, 5, 2],[2, 5, 0],[6, 8, 9],[2, 3, 1]]))
"""
print("----------------7---------------------")
print(a.topk(3, dim=1, largest=False)) # 每维度中,最小的3个值,以及索引
"""
输出结果:
torch.return_types.topk(
values=tensor([[0.0754, 0.0929, 0.2705],[0.0993, 0.2734, 0.3193],[0.4278, 0.4701, 0.5210],[0.1984, 0.2682, 0.3038]]),
indices=tensor([[1, 7, 6],[8, 3, 1],[3, 1, 7],[8, 6, 9]]))
"""print("----------------8---------------------")
print(a.kthvalue(8, dim=1)) # 每个维度中,第8个最大值的值,以及索引
"""
torch.return_types.kthvalue(
values=tensor([0.5295, 0.8027, 0.7630, 0.5491]),
indices=tensor([2, 0, 9, 1]))
"""
1.13.4.compare
, >=, <, <=, !=, ==
torch.eq(a, b) : 比较两个矩阵是否相等
# -*- coding: UTF-8 -*-import torcha = torch.rand(4, 10)
print("----------------1---------------------")
print(a)
"""
输出结果:
tensor([[0.5431, 0.2628, 0.1717, 0.2056, 0.0288, 0.9366, 0.3158, 0.7862, 0.0668, 0.9356],[0.8946, 0.1231, 0.8310, 0.3631, 0.1795, 0.9628, 0.9884, 0.2004, 0.1994, 0.6071],[0.8863, 0.5992, 0.7863, 0.1543, 0.3057, 0.0189, 0.0196, 0.0419, 0.1391, 0.2097],[0.7474, 0.1389, 0.6977, 0.7851, 0.6969, 0.6046, 0.8341, 0.5421, 0.3144, 0.8706]])
"""# 比较每个维度是否大于指定的值
print(a > 0.5)
"""
输出结果:
tensor([[ True, False, False, False, False, True, False, True, False, True],[ True, False, True, False, False, True, True, False, False, True],[ True, True, True, False, False, False, False, False, False, False],[ True, False, True, True, True, True, True, True, False, True]])
"""print(torch.gt(a, 0.5))
"""
输出结果:
tensor([[ True, False, False, False, False, True, False, True, False, True],[ True, False, True, False, False, True, True, False, False, True],[ True, True, True, False, False, False, False, False, False, False],[ True, False, True, True, True, True, True, True, False, True]])
"""print(a != 0)
"""
输出结果:
tensor([[True, True, True, True, True, True, True, True, True, True],[True, True, True, True, True, True, True, True, True, True],[True, True, True, True, True, True, True, True, True, True],[True, True, True, True, True, True, True, True, True, True]])
"""a = torch.ones(2, 3)
b = torch.randn(2, 3)
print(torch.eq(a, b))
"""
tensor([[False, False, False],[False, False, False]])
"""print(torch.eq(a, a))
"""
输出结果:
tensor([[True, True, True],[True, True, True]])
"""print(torch.equal(a, a))
"""
输出结果:
True
"""
13,12_基本运算,add/minus/multiply/divide,矩阵相乘mm,matmul,pow/sqrt/rsqrt,exp/log近似值,统计属性,mean,sum,min,max相关推荐
- RTKLIB 矩阵相乘函数matmul
在对RTKLIB进行二次开发时一定会用到矩阵相乘函数matmul. extern void matmul(const char *tr, int n, int k, int m, double alp ...
- tensorflow之矩阵相乘与matmul
矩阵如何做乘法,一直没搞清楚,今天写个实例: 如下: a = tf.constant([[1,2],[3,4]]) b = tf.constant([[0,0],[1,0]]) c =a *b wit ...
- pytorch 矩阵相乘_深入浅出PyTorch(算子篇)
Tensor 自从张量(Tensor)计算这个概念出现后,神经网络的算法就可以看作是一系列的张量计算.所谓的张量,它原本是个数学概念,表示各种向量或者数值之间的关系.PyTorch的张量(torch. ...
- Torch中的矩阵相乘分类
矩阵相乘在torch中的几种情况 1.矩阵逐元素(Element-wise)乘法 torch.mul(mat1, other) mat和other可以是标量也可以是任意维度的矩阵,只要满足最终相乘是可 ...
- 矩阵相乘-矩阵基本运算
矩阵相乘 输入两个矩阵,求乘积. 样本输入: 2 2 1 3 2 4 2 2 1 2 3 4 样本输出: 10 14 14 20 import java.util.Scanner; public cl ...
- html multiply属性,乘除(Multiply Divide)
乘或除的输入属性.该工具可分成三个部分:两个输入属性.一个应用于两个输入属性的运算符.一个保存运算结果的输出属性.输入和输出属性表示 X.Y 和 Z.使用该节点与颜色或三元值属性相乘. 在" ...
- 两个矩阵相乘的乘法次数_C ++程序将两个数字相乘而不使用乘法运算符
两个矩阵相乘的乘法次数 The problem is we have two integer numbers and find the multiplication of them without u ...
- 矩阵相乘的strassen算法_4-2.矩阵乘法的Strassen算法详解
题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B ...
- tensorflow中向量与矩阵相乘
我们只当使用tensorflow的tf.matmul()可以进行矩阵间的运算,但是要求矩阵的每一个维度的长度都要大于2,假如我们进行向量与矩阵的乘法时,使用该函数,则会报错. 具体地,我们使用一个2为 ...
最新文章
- Android Studio javadoc 生成注释文档
- python压测接口_python的一个接口压测脚本
- SQL语句快速回忆——SQL基础知识点汇总
- 互联网公司忽悠员工的黑话,套路太深了。。。
- [python opencv 计算机视觉零基础到实战] 十五 直方图反向投影
- 作者:王亚楠(1988-),男,中国科学院昆明植物研究所科学数据库管理员
- 2019北京理工大学计算机专硕经验分享
- 手机活动促销宣传海报,如何设计更有吸引力?
- 【例题】给定一个浮点格式(IEEE 754),有k位指数和n位小数,对于下列数,写出阶码E、尾数M、小数f和值V的公式。另外,请描述其位表示。
- day1-4js算术运算符及类型转化
- 小米9se无法连接adb的问题
- 使用Guava-retrying优雅地解决异常重试场景
- ipa图片解密 php,ipa文件详解 - 如何提取App图片
- 咕咕王小谢的C语言之路————第一章 初遇C语言 第三集 变量与常量
- 七、ref引用与数组的常用方法
- 机载激光雷达的应用现状及发展趋势
- 信号包络及其提取方法(Matlab)
- Cocos2D游戏项目CCTableView在Xcode7.2下的无法滚动问题
- win10禁用全角_win10系统屏蔽全角/半角快捷键的操作办法
- Geek的卸载存在小小缺憾
热门文章
- python使用while循环语句计算GDP
- 汤松榕:人工智能赋能多应用场景 助力企业实现数字化转型
- 渐近线(泪滴)能改善信号质量吗?
- 励志情感类视频剪辑需要如何制作?
- Photoshop入门与进阶实例:3.3 乳胶漆纹理效果
- 两阶段市场投标策略。 电力市场程序。 日前日内竞价 提出了日前电力市场和实时电力市场下充电站的投标策略
- pr文字转语音有插件吗_自媒体非常实用的文字转语音软件,配合PR软件实用简直绝配...
- MySQL外键约束(FOREIGN KEY)是什么?
- APE格式及编解码说明
- 当你使用笔记本电脑插入公司的局域网后你的wifi功能无法上网了,而且公司局域网没有外网,怎么既可以进公司局域网又可以上外网