news 2026/6/10 15:53:01

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/6/8 12:38:04

Qwen3-VL与纯文本大模型融合:实现无损多模态理解

Qwen3-VL与纯文本大模型融合:实现无损多模态理解 在智能系统日益深入人类生活场景的今天,一个关键挑战浮现出来:如何让AI真正“理解”我们日常交流中自然交织的文字与图像?用户随手发来一张带错误提示的手机截图,配上一…

作者头像 李华
网站建设 2026/6/10 0:45:25

Qwen3-VL读取维普期刊资源整合服务平台记录

Qwen3-VL读取维普期刊资源整合服务平台记录 在科研人员日常查阅文献的过程中,一个常见的痛点浮出水面:面对维普期刊资源整合服务平台这类信息密集、排版复杂的网页界面,想要快速提取几条文献的标题、作者和摘要,往往需要手动复制粘…

作者头像 李华
网站建设 2026/6/10 13:08:05

STM32 HAL库对接LVGL事件处理机制详解

STM32 HAL库对接LVGL事件处理机制详解从一个“卡顿的触摸屏”说起你有没有遇到过这样的场景?精心设计的UI界面在模拟器里滑如丝般流畅,烧录到STM32开发板上后却频频卡顿——点击按钮反应迟钝、滑动列表一顿一顿、长按功能根本触发不了。更糟的是&#xf…

作者头像 李华
网站建设 2026/6/6 3:28:17

宝,你越搞笑,他越着迷

1️⃣ 别跟我谈理想,我的理想是不上班。2️⃣ 想一夜暴瘦,实在不行,半夜也行。3️⃣ 网恋一定要真诚,这对手机和WiFi都好。4️⃣ 麻烦帮我挂个睡科,治治我的失眠症。5️⃣ 快乐达人三要素:饭多、话痨、笑点…

作者头像 李华
网站建设 2026/6/9 18:43:02

Qwen3-VL读取流程图生成对应的Python伪代码

Qwen3-VL读取流程图生成对应的Python伪代码 在软件开发和系统设计中,流程图一直是表达逻辑结构的通用语言。从算法教学到产品原型沟通,一张清晰的流程图往往胜过千言万语。但问题也随之而来:如何高效地将这些图形化的思维转化为可运行的代码&…

作者头像 李华
网站建设 2026/6/9 22:35:46

AI驱动供应商管理,AI应用架构师引领供应链智能化

AI驱动供应商管理:AI应用架构师如何引领供应链智能化革命 引言:采购经理的「深夜危机」与AI的「破局时刻」 凌晨1点,某家电企业采购经理张敏的办公室依然亮着灯。她揉着发红的眼睛,盯着电脑里的Excel表格——这是本周第53份需要审…

作者头像 李华