即看即用 && 其他操作(Other Operations) && Pytorch官方文档总结 && 笔记 (八)

(1)本文涉及函数的列表(注释在代码中)

  1. torch.cross                        # 向量积(叉积)
  2. torch.diag                          # 返回指定对角线元素(方阵/张量)
  3. torch.histc                         # 直方图
  4. torch.ones                         # 全 1 张量
  5. torch.renorm                     # 返回规范化后的各个子张量
  6. torch.trace                         # 迹
  7. torch.tril                             # 二维张量的下三角部分
  8. torch.triu                            # 二维张量的上三角部分

注意: 

figure 1. torch.cross() 

迹,是线性代数中的概念。

        矩阵的迹:主对角线(左上至右下的那一条)上所有元素之和。记作tr(A),其中A为方阵。

规范化,信息学术语,理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。

        数据规范化是将原来的度量值转换为无量纲的值。通过将属性数据按比例缩放,通过一个函数将给定属性的整个值域映射到一个新的值域中,即每个旧的值都被一个新的值替代。

figure 2. 冗余百科

 (2)代码示例(含注释)

"""
其他操作 Other Operations
"""
import torch

# # 返回沿着维度 dim 上,两个张量 input 和 other 的向量积(叉积)。
# #  input 和 other 必须有相同的形状,且指定的 dim 维上 size 必须为 3。
# 向量积公式见图像:img.png
obj1 = torch.cross(torch.tensor([1, 2, 3]), torch.tensor([4, 5, 6]))
# a * b = [[0, -3, 2],
#          [3, 0 ,-1],
#          [-2, 1, 0]] * [4, 5, 6] = [-3, 6, -3]

# # 如果输入是一个向量(1D 张量),则返回一个以 input 为对角线元素的 2D 方阵
# # 如果输入是一个矩阵(2D 张量),则返回一个包含 input 对角线元素的 1D 张量
# 参数 diagonal 指定对角线:
# diagonal = 0, 主对角线
# diagonal > 0, 主对角线之上
# diagonal < 0, 主对角线之下
obj2 = torch.diag(torch.tensor([1, 2, 3]))
obj3 = torch.diag(torch. tensor([[1, 0, 8],
                                 [0, 2, 0],
                                 [6, 0, 3]]), diagonal=-1)  # 对角线之下的第一个斜线
obj4 = torch.diag(torch. tensor([[1, 0, 8],
                                 [0, 2, 0],
                                 [6, 0, 3]]), diagonal=0)  # 对角线
obj5 = torch.diag(torch. tensor([[1, 0, 8],
                                 [0, 2, 0],
                                 [6, 0, 3]]), diagonal=2)  # 对角线之上的第二个斜线

# # 计算输入张量的直方图。
# # torch.histc(input, bins=100, min=0, max=0, out=None) → Tensor
# # 以 min 和 max 为 range 边界,将其均分成 bins 个直条,然后将排序好的数据划分到各个直条(bins)中。
# # 如果 min 和 max 都为 0, 则利用数据中的最大最小值作为边界。
obj6 = torch.histc(torch.FloatTensor([1, 2, 1, 1, 1, 2]), bins=4, min=0, max=3)

# # 返回一个张量,包含规范化后的各个子张量,使得沿着 dim 维划分的各子张量的 p 范数小于 maxnorm。
# # 注意: 如果 p 范数的值小于 maxnorm,则当前子张量不需要修改。
# # torch.renorm(input, p, dim, maxnorm, out=None) → Tensor
x = torch.ones(3, 3)
x[1].fill_(2)
x[2].fill_(3)
obj7 = torch.renorm(x, p=1, dim=0, maxnorm=5)
obj8 = torch.renorm(x, p=1, dim=0, maxnorm=2)

# # 返回输入 2 维矩阵对角线元素的和(迹)
obj9 = torch.trace(x)

# # 返回一个张量 out,包含输入矩阵(2D 张量)的下三角部分,out 其余部分被设为 0。
obj10 = torch.tril(x, diagonal=0)
obj11 = torch.tril(x, diagonal=1)
obj12 = torch.tril(x, diagonal=-1)

# # 返回一个张量,包含输入矩阵(2D 张量)的上三角部分,其余部分被设为 0。
obj13 = torch.triu(x, diagonal=0)
obj14 = torch.triu(x, diagonal=1)
obj15 = torch.triu(x, diagonal=-1)

print("*"*20, "obj1", "*"*20, "\n", obj1, "\n")
print("*"*20, "obj2", "*"*20, "\n", obj2, "\n", obj3, "\n", obj4, "\n", obj5, "\n")
print("*"*20, "obj6", "*"*20, "\n", obj6, "\n")
print("*"*20, "obj8", "*"*20, "\n", x, "\n", obj7, "\n", obj8, "\n")
print("*"*20, "obj9", "*"*20, "\n", obj9, "\n")
print("*"*20, "obj10", "*"*20, "\n", obj10, "\n", obj11, "\n", obj12, "\n")

  >>>output

******************** obj1 ******************** 
 tensor([-3,  6, -3]) 

******************** obj2 ******************** 
 tensor([[1, 0, 0],
               [0, 2, 0],
               [0, 0, 3]]) 
 tensor([0, 0]) 
 tensor([1, 2, 3]) 
 tensor([8]) 

******************** obj6 ******************** 
 tensor([0., 4., 2., 0.]) 

******************** obj8 ******************** 
 tensor([[1., 1., 1.],
              [2., 2., 2.],
              [3., 3., 3.]]) 
 tensor([[1.0000, 1.0000, 1.0000],
              [1.6667, 1.6667, 1.6667],
              [1.6667, 1.6667, 1.6667]]) 
 tensor([[0.6667, 0.6667, 0.6667],
              [0.6667, 0.6667, 0.6667],
              [0.6667, 0.6667, 0.6667]]) 

******************** obj9 ******************** 
 tensor(6.) 

******************** obj10 ******************** 
 tensor([[1., 0., 0.],
              [2., 2., 0.],
              [3., 3., 3.]]) 
 tensor([[1., 1., 0.],
              [2., 2., 2.],
              [3., 3., 3.]]) 
 tensor([[0., 0., 0.],
              [2., 0., 0.],
              [3., 3., 0.]]) 

专栏链接直达: 

https://blog.csdn.net/qq_54185421/category_11794260.html?spm=1001.2014.3001.5482icon-default.png?t=M4ADhttps://blog.csdn.net/qq_54185421/category_11794260.html?spm=1001.2014.3001.5482 >>>如有疑问,欢迎评论区一起探讨

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying Bulldog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值