从PyTorch官方的一篇教程说开去(6.2 - 张量 tensor 矩阵运算等)

news2024/9/25 1:23:16

您的进步和反馈是我写作最大的动力,小伙伴来个三连呗!共勉~

话不多说,书接上文,需要温习的小伙伴请移步 - 从PyTorch官方的一篇教程说开去(6.1 - 张量 tensor 基本操作)-CSDN博客

借图镇楼 - 

1 - 矩阵乘法(点积或外积,整个行乘以整个列):

shape = (4,4)
ones_tensor = torch.ones(shape)
y1 = ones_tensor @ ones_tensor
print(f"{y1}\n")

shape = (4,4)
ones_tensor = torch.ones(shape)
y2 = torch.matmul(ones_tensor,ones_tensor.T)
print(f"{y2}\n")

z1 = torch.rand_like(y1)
torch.matmul(ones_tensor, ones_tensor.T, out=z1)
print(f"{z1}\n")
  • 使用 @ 符号,等同于调用matmul函数,进行矩阵乘法。由于 ones_tensor 是一个 4x4 的全1矩阵,其与自身的乘法结果将是一个元素为4的矩阵。ones_tensor.T 表示转置。用out 参数,可以就地执行矩阵乘法,结果存储在 z1 中。这样可以避免额外的内存分配。

2 - 元素级别的点乘(dot product):

y3 = ones_tensor * ones_tensor
print(f"{y3}\n")

y4 = torch.mul(ones_tensor,ones_tensor.T)
print(f"{y4}\n")

z2 = torch.rand_like(y3)
torch.mul(ones_tensor,ones_tensor.T,out=z2)
  • 元素级别的点乘,也就是逐元素相乘。对于全1矩阵,结果是每个元素都是1。同上例,提供3种算符。

3 - torch没有官方定义叉乘(Cross Product):

# 定义两个三维向量
vector_a = torch.tensor([1.0, 2.0, 3.0])
vector_b = torch.tensor([4.0, 5.0, 6.0])

# 计算叉乘
cross_product = torch.linalg.cross(vector_a, vector_b)

print(f"Vector A: {vector_a}")
print(f"Vector B: {vector_b}")
print(f"Cross Product: {cross_product}")
  • 尽管官方没有,但是为了区别这几个容易混淆的概念,我们还是配个例子。叉乘(Cross Product)通常是针对两个三维向量而言的,它返回一个向量,该向量垂直于原来的两个向量,并遵循右手定则。

4 - 单元素张量:

agg = ones_tensor.sum()
agg_item = agg.item()
print(agg_item,type(agg_item))
  •  ones_tensor 是一个 4x4 的单位矩阵,其元素总和将是 4x4=16。item() 方法用于将这个张量转换成一个 Python 标量(即一个单一数值)。在进行一些扁平化的操作时候会用到。

5 - 就地计算函数(为节约存储,这些都很常用):

原地操作函数(in-place operations) 以_结尾
add_(): 原地加法。
sub_(): 原地减法。
mul_(): 原地乘法。
div_(): 原地除法。

copy_(): 原地复制。
t_(): 原地转置。
fill_(): 原地填充。
zero_(): 原地清零。

clamp_(): 原地限制值。
clamp_min_(): 原地最小值限制。
clamp_max_(): 原地最大值限制。

sum_(): 原地求和。
mean_(): 原地求平均值。
std_(): 原地求标准差。
var_(): 原地求方差。
norm_(): 原地求范数。
renorm_(): 原地重规范化。

addmm_(): 原地矩阵乘法加法。
addr_(): 原地地址加法。
addbmm_(): 原地二维矩阵乘法加法。
baddbmm_(): 原地批量二维矩阵乘法加法。
mm_(): 原地矩阵乘法。
bmm_(): 原地批量矩阵乘法。

ger_(): 原地外积。
linalg_vector_norm_(): 原地向量范数。
linalg_matrix_norm_(): 原地矩阵范数。
linalg_solve_(): 原地线性求解。
linalg_inv_(): 原地矩阵求逆。
linalg_pinv_(): 原地伪逆。
linalg_eig_(): 原地特征值分解。
linalg_svd_(): 原地奇异值分解。
linalg_householder_product_(): 原地Householder变换。
linalg_qr_(): 原地QR分解。
linalg_triangular_solve_(): 原地三角求解。
linalg_cholesky_(): 原地Cholesky分解。
linalg_symeig_(): 原地对称特征值分解。
linalg_eigvals_(): 原地特征值计算。
linalg_eigvalsh_(): 原地Hermitian特征值计算。
linalg_slogdet_(): 原地对数行列式。
linalg_det_(): 原地行列式。
linalg_cond_(): 原地条件数。
linalg_matrix_rank_(): 原地矩阵秩。
linalg_solve_triangular_(): 原地三角求解。
linalg_lstsq_(): 原地最小二乘求解。

6 - 打印结果和类型:

np_array = np.array(data)
x_np = torch.from_numpy(np_array)

print(f"{x_np}\n")
x_np.add_(1)
print(np_array,"\n")

n = np.ones(5)
t = torch.from_numpy(n)
np.add(n,1,out=n)
print(f"{t} \n{n}")
  •  
  • 这里就地展示一下上个小标题的原地计算函数,add_() 是就地操作,它将 1 加到张量 x_np 的每个元素上。注意,由于 x_np 和 np_array 共享内存,np_array 也会被修改。我们还一同展示了如何在数组和张量之间进行互相转化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面经】 HR面试套路一览 | 10条面试要点总结

博客主页:Duck Bro 博客主页 关注博主,后期持续更新系列文章 如果有错误感谢请大家批评指出,及时修改 感谢大家点赞👍收藏⭐评论✍ 面经总结 目录 面经总结前言1. 期望薪资2. 关于加班的问题3. 平时是如何学习的(学…

光电测径仪和激光测径仪的区别

光电测径仪和激光测径仪都是用于测量物体直径的精密仪器,它们在工作原理、测量范围、精度、适用场景等方面有所不同。光电测径仪通常使用CCD光电传感器来检测通过物体的光强度变化,而激光测径仪则使用激光作为测量信号,通过发射激光束并接收反…

IT服务质量管理攻略(至简)

质量管理、风险管理和信息安全管理是IT服务监督管理的重要内容,三者之间相对独立。IT服务质量管理是通过制订质量方针、质量目标和质量计划,实施质量控制、质量保证和质量改进活动,确保IT服务满足服务级别协议的要求,最终获得用户…

案例分享-国外UI设计界面赏析

国外UI设计倾向于简洁的布局和清晰的排版,减少视觉干扰,提升用户体验。通过合理的色彩搭配和图标设计,营造舒适愉悦的使用氛围。 设计师不拘泥于传统框架,勇于尝试新元素和理念,使界面独特有趣。同时,强调以…

班美净创始人钟书兰 引领美业新潮流,铸就美丽传奇

在竞争激烈的中国美业市场中,一位杰出的女性创业者凭借其独特的眼光、创新的理念和坚定的决心,开辟出了一片属于自己的辉煌天地。钟书兰,作为班美净的创始人,正以其卓越的领导力和对美的执着追求,在问题性皮肤管理领域…

上网行为监控是如何监控的,能监控到哪些内容,是否合法?

上网行为监控已成为许多企业和机构保障信息安全、提高工作效率的重要手段。 那么,上网行为监控是如何实现的? 它能监控到哪些内容? 这一行为在法律上是否合法? 本文将围绕这些问题展开探讨。 上网行为监控是如何监控的&#x…

CNAS认可认证!

在中国,CNAS(中国合格评定国家认可委员会)认可认证作为质量管理与国际接轨的重要标志,不仅促进了国内检测、校准和检验实验室的技术能力提升,还极大地增强了我国检验检测服务行业的国际竞争力。本文将从CNAS认可认证的…

Lombok的坑:VUE通过ajax.post请求向spring后台传参,部分属性接收不到。

一、问题:VUE通过ajax.post请求向spring后台传参,bAppId属性接收不到,其他的值均正常接收 实体类定义: VUE代码: JAVA代码: 二、原因 实体类使用lombok.Data的Data注解生成get/set,针对首字母小…

Java集合知识点

一、集合类及其特点 在程序设计中,一个重要的组成部分就是如何有效地组织和表示数据通常,我们把用于存储和管理数据的实体称为数据结构而把一组元素按照一定的数据结构进行存储和管理的容器。就称为集合。通过数据结构,我们可以实现不同特性…

制程能力指数(CPK)定义、计算方法知识

一、Cpk的定义 Cpk (Process Capability Index )的定义:制程能力指数; Cpk的意义:是制程水平的量化反映,用来表达制程的水平。 制程能力指数:是一种表示制程水平高低的方便方法,其实质作用是反映制程 合…

程序员VS人工智能

随着Chat GPT人工智能大模型的问世,人工智能将成为普遍的工具。 人工智能优点在于"效率高,方便快捷……",吸引了一大群用户。人工智能在未来世界中,占据了不可缺的地事例1 据海南日报报道,为确保考试公平公正&#xff…

跟《经济学人》学英文:2024年08月03日这期 India’s electric-scooter champion goes public

India’s electric-scooter champion goes public It promises to be a wild ride for investors electric-scooter:电瓶车,电动车 wide ride: 充满波折的过程 解释:指经历一个充满波折、刺激或不可预测的过程。通常用来形容冒险或经历的起…

leetcode 958.二叉树的完全性检验

1.题目要求: 给你一棵二叉树的根节点 root ,请你判断这棵树是否是一棵 完全二叉树 。在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h 层)…

【数据结构】哈希应用-布隆过滤器

目录 1、布隆过滤器的概念 2、布隆过滤器误判率推导 3、代码实现 3.1 Set 3.2 Test 4、布隆过滤器的删除 5、布隆过滤器的应用 1、布隆过滤器的概念 有⼀些场景下⾯,有⼤量数据需要判断是否存在,⽽这些数据不是整形,那么位图就不能使…

【学习笔记】Day 6

一、进度概述 1、《地震勘探原理》第二章 2、“DenseNet” 周报分享 二、详情 1、《地震勘探原理》第二章 注:本来的打算是逐章整理,但是在听老师指导后,明晰了学习目的。故学习方法更改为侧重 “刷” 。不求一遍全弄懂&#xff0c…

实验8-2-4 使用函数实现字符串部分复制

本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。 函数接口定义: void strmcpy( char *t, int m, char *s );函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度…

[Vue]Vue3从入门到精通-综合案例分析

一.Vue是什么: 概念:Vue是一个用于构建用户界面的渐进式的框架 以下的内容是自里向外的 声明式渲染(Vuejs核心包)组件系统(Vuejs核心包)客户端路由VueRouter大规模状态管理Vuex构建工具Webpack/Vite Vue的两种使用方式: Vue核心包开发-&…

好用高性价比蓝牙耳机有哪些?万人点赞四大高性价比耳机推荐

如今,市面上蓝牙耳机种类繁多,而面对市场上众多百元内的耳机品牌和型号,怎么选才能够选到一款音质好,续航久的蓝牙耳机呢,到底什么样的蓝牙耳机更适合自己,那么好用高性价比蓝牙耳机有哪些?接下…

理解Spring框架2:容器IOC

理解Spring框架2:容器IOC (qq.com)

如何计算UDP校验和

在了解 UDP 校验和的时候,发现资料很少,如果看教材的话,一定看到过下面这两张图,但是又看不懂,加上解释之后也难懂: 本文先说具体怎么算的,再说一些细节,过程中顺带解释一下这两个图…