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相关推荐

  1. RTKLIB 矩阵相乘函数matmul

    在对RTKLIB进行二次开发时一定会用到矩阵相乘函数matmul. extern void matmul(const char *tr, int n, int k, int m, double alp ...

  2. tensorflow之矩阵相乘与matmul

    矩阵如何做乘法,一直没搞清楚,今天写个实例: 如下: a = tf.constant([[1,2],[3,4]]) b = tf.constant([[0,0],[1,0]]) c =a *b wit ...

  3. pytorch 矩阵相乘_深入浅出PyTorch(算子篇)

    Tensor 自从张量(Tensor)计算这个概念出现后,神经网络的算法就可以看作是一系列的张量计算.所谓的张量,它原本是个数学概念,表示各种向量或者数值之间的关系.PyTorch的张量(torch. ...

  4. Torch中的矩阵相乘分类

    矩阵相乘在torch中的几种情况 1.矩阵逐元素(Element-wise)乘法 torch.mul(mat1, other) mat和other可以是标量也可以是任意维度的矩阵,只要满足最终相乘是可 ...

  5. 矩阵相乘-矩阵基本运算

    矩阵相乘 输入两个矩阵,求乘积. 样本输入: 2 2 1 3 2 4 2 2 1 2 3 4 样本输出: 10 14 14 20 import java.util.Scanner; public cl ...

  6. html multiply属性,乘除(Multiply Divide)

    乘或除的输入属性.该工具可分成三个部分:两个输入属性.一个应用于两个输入属性的运算符.一个保存运算结果的输出属性.输入和输出属性表示 X.Y 和 Z.使用该节点与颜色或三元值属性相乘. 在" ...

  7. 两个矩阵相乘的乘法次数_C ++程序将两个数字相乘而不使用乘法运算符

    两个矩阵相乘的乘法次数 The problem is we have two integer numbers and find the multiplication of them without u ...

  8. 矩阵相乘的strassen算法_4-2.矩阵乘法的Strassen算法详解

    题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B ...

  9. tensorflow中向量与矩阵相乘

    我们只当使用tensorflow的tf.matmul()可以进行矩阵间的运算,但是要求矩阵的每一个维度的长度都要大于2,假如我们进行向量与矩阵的乘法时,使用该函数,则会报错. 具体地,我们使用一个2为 ...

最新文章

  1. Android Studio javadoc 生成注释文档
  2. python压测接口_python的一个接口压测脚本
  3. SQL语句快速回忆——SQL基础知识点汇总
  4. 互联网公司忽悠员工的黑话,套路太深了。。。
  5. [python opencv 计算机视觉零基础到实战] 十五 直方图反向投影
  6. 作者:王亚楠(1988-),男,中国科学院昆明植物研究所科学数据库管理员
  7. 2019北京理工大学计算机专硕经验分享
  8. 手机活动促销宣传海报,如何设计更有吸引力?
  9. 【例题】给定一个浮点格式(IEEE 754),有k位指数和n位小数,对于下列数,写出阶码E、尾数M、小数f和值V的公式。另外,请描述其位表示。
  10. day1-4js算术运算符及类型转化
  11. 小米9se无法连接adb的问题
  12. 使用Guava-retrying优雅地解决异常重试场景
  13. ipa图片解密 php,ipa文件详解 - 如何提取App图片
  14. 咕咕王小谢的C语言之路————第一章 初遇C语言 第三集 变量与常量
  15. 七、ref引用与数组的常用方法
  16. 机载激光雷达的应用现状及发展趋势
  17. 信号包络及其提取方法(Matlab)
  18. Cocos2D游戏项目CCTableView在Xcode7.2下的无法滚动问题
  19. win10禁用全角_win10系统屏蔽全角/半角快捷键的操作办法
  20. Geek的卸载存在小小缺憾

热门文章

  1. python使用while循环语句计算GDP
  2. 汤松榕:人工智能赋能多应用场景 助力企业实现数字化转型
  3. 渐近线(泪滴)能改善信号质量吗?
  4. 励志情感类视频剪辑需要如何制作?
  5. Photoshop入门与进阶实例:3.3 乳胶漆纹理效果
  6. 两阶段市场投标策略。 电力市场程序。 日前日内竞价 提出了日前电力市场和实时电力市场下充电站的投标策略
  7. pr文字转语音有插件吗_自媒体非常实用的文字转语音软件,配合PR软件实用简直绝配...
  8. MySQL外键约束(FOREIGN KEY)是什么?
  9. APE格式及编解码说明
  10. 当你使用笔记本电脑插入公司的局域网后你的wifi功能无法上网了,而且公司局域网没有外网,怎么既可以进公司局域网又可以上外网