news 2026/4/21 2:49:37

Day55 PythonStudy

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day55 PythonStudy

@浙大疏锦行

import torch # 创建原始张量 a = torch.tensor([[10], [20], [30]]) # 形状: (3, 1) b = torch.tensor([1, 2, 3]) # 形状: (3,) result = a + b # 广播过程 # 1. b补全维度: (3,) → (1, 3) # 2. a扩展列: (3, 1) → (3, 3) # 3. b扩展行: (1, 3) → (3, 3) # 最终形状: (3, 3) print("原始张量a:") print(a) print("\n原始张量b:") print(b) print("\n广播后a的值扩展:") print(torch.tensor([[10, 10, 10], [20, 20, 20], [30, 30, 30]])) # 实际内存中未复制,仅逻辑上扩展 print("\n广播后b的值扩展:") print(torch.tensor([[1, 2, 3], [1, 2, 3], [1, 2, 3]])) # 实际内存中未复制,仅逻辑上扩展 print("\n加法结果:") print(result)

原始张量a:
tensor([[10],
[20],
[30]])

原始张量b:
tensor([1, 2, 3])

广播后a的值扩展:
tensor([[10, 10, 10],
[20, 20, 20],
[30, 30, 30]])

广播后b的值扩展:
tensor([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])

加法结果:
tensor([[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])

# 创建原始张量 a = torch.tensor([[[1], [2]], [[3], [4]]]) # 形状: (2, 2, 1) b = torch.tensor([[10, 20]]) # 形状: (1, 2) # 广播过程 # 1. b补全维度: (1, 2) → (1, 1, 2) # 2. a扩展第三维: (2, 2, 1) → (2, 2, 2) # 3. b扩展第一维: (1, 1, 2) → (2, 1, 2) # 4. b扩展第二维: (2, 1, 2) → (2, 2, 2) # 最终形状: (2, 2, 2) result = a + b print("原始张量a:") print(a) print("\n原始张量b:") print(b) print("\n广播后a的值扩展:") print(torch.tensor([[[1, 1], [2, 2]], [[3, 3], [4, 4]]])) # 实际内存中未复制,仅逻辑上扩展 print("\n广播后b的值扩展:") print(torch.tensor([[[10, 20], [10, 20]], [[10, 20], [10, 20]]])) # 实际内存中未复制,仅逻辑上扩展 print("\n加法结果:") print(result)

原始张量a:
tensor([[[1],
[2]],

[[3],
[4]]])

原始张量b:
tensor([[10, 20]])

广播后a的值扩展:
tensor([[[1, 1],
[2, 2]],

[[3, 3],
[4, 4]]])

广播后b的值扩展:
tensor([[[10, 20],
[10, 20]],

[[10, 20],
[10, 20]]])

加法结果:
tensor([[[11, 21],
[12, 22]],

[[13, 23],
[14, 24]]])

# 创建原始张量 a = torch.tensor([[1, 2], [3, 4]]) # 形状: (2, 2) b = 10 # 标量,形状视为 () # 广播过程 # 1. b补全维度: () → (1, 1) # 2. b扩展第一维: (1, 1) → (2, 1) # 3. b扩展第二维: (2, 1) → (2, 2) # 最终形状: (2, 2) result = a + b print("原始张量a:") print(a) # 输出: # tensor([[1, 2], # [3, 4]]) print("\n标量b:") print(b) # 输出: 10 print("\n广播后b的值扩展:") print(torch.tensor([[10, 10], [10, 10]])) # 实际内存中未复制,仅逻辑上扩展 print("\n加法结果:") print(result) # 输出: # tensor([[11, 12], # [13, 14]])

原始张量a:
tensor([[1, 2],
[3, 4]])

标量b:
10

广播后b的值扩展:
tensor([[10, 10],
[10, 10]])

加法结果:
tensor([[11, 12],
[13, 14]])

# 创建原始张量 a = torch.tensor([[[1, 2], [3, 4]]]) # 形状: (1, 2, 2) b = torch.tensor([[5, 6]]) # 形状: (1, 2) # 广播过程 # 1. b补全维度: (1, 2) → (1, 1, 2) # 2. b扩展第二维: (1, 1, 2) → (1, 2, 2) # 最终形状: (1, 2, 2) result = a + b print("原始张量a:") print(a) # 输出: # tensor([[[1, 2], # [3, 4]]]) print("\n原始张量b:") print(b) # 输出: # tensor([[5, 6]]) print("\n广播后b的值扩展:") print(torch.tensor([[[5, 6], [5, 6]]])) # 实际内存中未复制,仅逻辑上扩展 print("\n加法结果:") print(result) # 输出: # tensor([[[6, 8], # [8, 10]]])

原始张量a:
tensor([[[1, 2],
[3, 4]]])

原始张量b:
tensor([[5, 6]])

广播后b的值扩展:
tensor([[[5, 6],
[5, 6]]])

加法结果:
tensor([[[ 6, 8],
[ 8, 10]]])

import torch # A: 批量大小为2,每个是3×4的矩阵 A = torch.randn(2, 3, 4) # 形状: (2, 3, 4) # B: 单个4×5的矩阵 B = torch.randn(4, 5) # 形状: (4, 5) # 广播过程: # 1. B补全维度: (4, 5) → (1, 4, 5) # 2. B扩展第一维: (1, 4, 5) → (2, 4, 5) # 矩阵乘法: (2, 3, 4) @ (2, 4, 5) → (2, 3, 5) result = A @ B # 结果形状: (2, 3, 5) print("A形状:", A.shape) # 输出: torch.Size([2, 3, 4]) print("B形状:", B.shape) # 输出: torch.Size([4, 5]) print("结果形状:", result.shape) # 输出: torch.Size([2, 3, 5])

A形状: torch.Size([2, 3, 4])
B形状: torch.Size([4, 5])
结果形状: torch.Size([2, 3, 5])

# A: 批量大小为3,每个是2×4的矩阵 A = torch.randn(3, 2, 4) # 形状: (3, 2, 4) # B: 批量大小为1,每个是4×5的矩阵 B = torch.randn(1, 4, 5) # 形状: (1, 4, 5) # 广播过程: # B扩展第一维: (1, 4, 5) → (3, 4, 5) # 矩阵乘法: (3, 2, 4) @ (3, 4, 5) → (3, 2, 5) result = A @ B # 结果形状: (3, 2, 5) print("A形状:", A.shape) # 输出: torch.Size([3, 2, 4]) print("B形状:", B.shape) # 输出: torch.Size([1, 4, 5]) print("结果形状:", result.shape) # 输出: torch.Size([3, 2, 5])

A形状: torch.Size([3, 2, 4])
B形状: torch.Size([1, 4, 5])
结果形状: torch.Size([3, 2, 5])

# A: 批量大小为2,通道数为3,每个是4×5的矩阵 A = torch.randn(2, 3, 4, 5) # 形状: (2, 3, 4, 5) # B: 单个5×6的矩阵 B = torch.randn(5, 6) # 形状: (5, 6) # 广播过程: # 1. B补全维度: (5, 6) → (1, 1, 5, 6) # 2. B扩展第一维: (1, 1, 5, 6) → (2, 1, 5, 6) # 3. B扩展第二维: (2, 1, 5, 6) → (2, 3, 5, 6) # 矩阵乘法: (2, 3, 4, 5) @ (2, 3, 5, 6) → (2, 3, 4, 6) result = A @ B # 结果形状: (2, 3, 4, 6) print("A形状:", A.shape) # 输出: torch.Size([2, 3, 4, 5]) print("B形状:", B.shape) # 输出: torch.Size([5, 6]) print("结果形状:", result.shape) # 输出: torch.Size([2, 3, 4, 6])

A形状: torch.Size([2, 3, 4, 5])
B形状: torch.Size([5, 6])
结果形状: torch.Size([2, 3, 4, 6])

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 22:20:02

ARM架构快速入门:核心要点一文掌握

ARM架构入门:从寄存器到生态,一文讲透工程师真正需要掌握的核心你有没有遇到过这样的情况?在调试一个STM32项目时,中断没响应;低功耗模式电流下不去;或者代码跑飞了却不知道该查哪一级异常。这些问题的背后…

作者头像 李华
网站建设 2026/4/19 16:26:14

Qwen3-VL解析UltraISO界面元素实现自动化操作

Qwen3-VL解析UltraISO界面元素实现自动化操作 在当今软件生态中,大量关键工具仍停留在“只能手动点”的时代——比如老牌光盘镜像处理软件UltraISO。它功能强大、稳定可靠,却缺乏现代API接口,无法直接编程调用。每当需要批量刻录ISO文件时&am…

作者头像 李华
网站建设 2026/4/20 3:46:35

Qwen3-VL识别Streamlit应用界面组件结构

Qwen3-VL识别Streamlit应用界面组件结构 在现代数据科学和低代码开发的浪潮中,Streamlit 已成为构建交互式 Web 应用的热门工具。它让开发者只需几行 Python 代码就能快速搭建出功能完整的仪表盘、数据分析平台甚至原型产品。然而,随着这类可视化应用数量…

作者头像 李华
网站建设 2026/4/19 17:28:12

Qwen3-VL将PDF讲义转换为可编辑Markdown格式

Qwen3-VL如何将PDF讲义智能转换为可编辑Markdown 在当今知识密集型的工作场景中,我们每天都在与大量PDF文档打交道——高校的课程讲义、科研论文、技术手册、培训资料……这些文件往往图文并茂、公式繁多,结构复杂。然而,尽管它们承载着宝贵的…

作者头像 李华
网站建设 2026/4/17 19:14:01

AO3镜像站:突破访问限制的同人文化宝库

AO3镜像站:突破访问限制的同人文化宝库 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 项目价值与意义 在当今数字时代,文化内容的自由流通显得尤为重要。AO3镜像站作为一个开源项目&#xff…

作者头像 李华
网站建设 2026/4/16 13:36:56

零基础也能懂的电源管理系统概述

电源管理:不只是“供电”那么简单你有没有想过,为什么你的手机能一边充电、一边快充、一边还能正常运行?为什么一块小小的电池能让智能手表连续工作好几天?为什么有些设备一开机就死机,而另一些却稳定如初?…

作者头像 李华