PyTorch中張量(TensorFlow)操作方法和屬性匯總詳解和代碼示例

1、張量的操作匯總

下面是 PyTorch 中常見的 張量操作方法匯總,包括 創建、索引、變換、數學運算、廣播機制、維度操作 等內容,并附上詳解和代碼示例,便于系統學習與實戰參考。


一、張量創建(torch.tensor 等)

import torch# 標量(0維張量)
a = torch.tensor(3.14)# 1維張量
b = torch.tensor([1.0, 2.0, 3.0])# 2維張量
c = torch.tensor([[1, 2], [3, 4]])# 全 0 / 全 1
zeros = torch.zeros((2, 3))
ones = torch.ones((3, 3))# 均勻分布隨機數
rand = torch.rand((2, 2))# 正態分布
normal = torch.randn(2, 3)# 固定范圍整數
int_rand = torch.randint(0, 10, (3, 3))

二、張量屬性(維度、形狀、類型)

x = torch.rand(2, 3)print(x.shape)    # torch.Size([2, 3])
print(x.dtype)    # torch.float32
print(x.ndim)     # 2
print(x.size())   # same as x.shape

三、索引與切片(Indexing & Slicing)

x = torch.tensor([[1, 2, 3], [4, 5, 6]])print(x[0])       # 第0行 [1, 2, 3]
print(x[:, 1])    # 所有行的第1列 [2, 5]
print(x[1, 2])    # 第1行第2列 -> 6# 修改元素
x[0, 1] = 10

四、形狀變換(Reshape)

x = torch.arange(12)     # [0, 1, ..., 11]
x = x.view(3, 4)         # reshape 為 (3,4)x = x.reshape(2, 6)      # reshape 新形狀
x = x.flatten()          # 轉為 1D
x = x.unsqueeze(0)       # 增加一維 (batch-like)
x = x.squeeze()          # 去除多余維度

五、數學運算

元素級運算(+,-,*,/)

a = torch.tensor([1., 2., 3.])
b = torch.tensor([4., 5., 6.])print(a + b)
print(a * b)
print(torch.exp(a))
print(torch.sqrt(b))

矩陣運算

A = torch.tensor([[1., 2.], [3., 4.]])
B = torch.tensor([[5., 6.], [7., 8.]])# 點積/矩陣乘法
print(torch.matmul(A, B))   # 或 A @ B

六、廣播機制(Broadcasting)

a = torch.tensor([[1], [2], [3]])   # shape (3,1)
b = torch.tensor([10, 20, 30])      # shape (3,)# 廣播加法 => shape (3,3)
print(a + b)

七、維度操作:拼接、拆分、轉置

a = torch.ones((2, 3))
b = torch.zeros((2, 3))# 拼接
cat = torch.cat([a, b], dim=0)  # shape (4, 3)# 拆分
split = torch.split(cat, 2, dim=0)  # 拆成兩個 (2,3)# 轉置
x = torch.rand(2, 3)
print(x.T)   # shape (3,2)

八、常用統計操作

x = torch.tensor([[1., 2.], [3., 4.]])print(x.sum())           # 所有元素求和
print(x.mean())          # 平均值
print(x.max(), x.min())  # 最大最小值
print(x.argmax(), x.argmin())  # 最大/最小索引

九、條件與掩碼操作(布爾索引)

x = torch.tensor([1, 2, 3, 4, 5])
mask = x > 3
print(x[mask])  # 輸出 [4, 5]

十、張量復制與共享

a = torch.tensor([1, 2, 3])
b = a.clone()     # 拷貝,不共享內存
c = a             # 共享內存

總結思維導圖(簡要)

張量操作:
├── 創建(tensor, zeros, randn, randint)
├── 屬性(shape, dtype, ndim)
├── 索引(x[i], x[:, j])
├── 運算(+ - * /, matmul, exp, log)
├── 廣播(自動擴展維度)
├── 變換(view, reshape, squeeze, unsqueeze)
├── 拼接/分割(cat, stack, split, chunk)
├── 統計分析(sum, mean, max, argmax)
├── 條件掩碼(mask, where)
└── 復制(clone, detach)

2、張量屬性匯總

PyTorch 中張量(Tensor)是數據的基本結構。每個張量都具有一組屬性(Attributes)來描述它的維度、數據類型、設備、存儲結構等信息。


張量的核心屬性匯總

屬性名含義說明示例值
.shape / .size()張量的形狀(各維度大小)torch.Size([3, 4])
.ndim張量的維度數(維度的數量)2
.dtype數據類型torch.float32
.device存儲設備:CPU 或 GPUcpu, cuda:0
.requires_grad是否記錄梯度(用于自動求導)True/False
.is_leaf是否是葉子節點(可用于反向傳播分析)True/False
.grad梯度值(反向傳播后賦值)None 或張量
.data原始數據(無梯度跟蹤)張量數據
.T轉置(僅適用于二維張量)tensor.T
.storage()存儲對象(高級屬性)FloatStorage

示例代碼:張量屬性全面演示

import torch# 創建張量
a = torch.randn(3, 4, dtype=torch.float32, requires_grad=True)print("張量 a:\n", a)
print("\n== 張量屬性 ==")
print("形狀 shape:", a.shape)
print("維度 ndim:", a.ndim)
print("數據類型 dtype:", a.dtype)
print("所在設備 device:", a.device)
print("是否需要梯度 requires_grad:", a.requires_grad)
print("是否為葉子節點 is_leaf:", a.is_leaf)
print("梯度 grad:", a.grad)
print("原始數據 data:\n", a.data)
print("轉置 T:\n", a.T)
print("存儲 storage:", a.storage())

進階示例:查看 GPU 張量屬性 + 修改屬性

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")b = torch.ones((2, 3), dtype=torch.float64, device=device)
print("\n張量 b 屬性:")
print("b.shape:", b.shape)
print("b.dtype:", b.dtype)
print("b.device:", b.device)# 修改數據類型和設備
b2 = b.to(dtype=torch.float32, device='cpu')
print("\n修改后:")
print("b2.dtype:", b2.dtype)
print("b2.device:", b2.device)

示例:grad 與 requires_grad 的關系

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x ** 2
z = y.sum()print("z:", z)
z.backward()
print("x.grad:", x.grad)  # dz/dx = 2x

Tips

  • .shape.size() 等價,都返回 torch.Size 對象。
  • .is_leaf 為 True 的張量通常是直接創建的變量,反向傳播時只保留其梯度。
  • .data 會返回張量本身的數據,但不參與自動求導

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89060.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89060.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89060.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

統一日志格式規范與 Filebeat+Logstash 實踐落地

背景 在多部門、多技術棧并存的企業環境中,日志收集與分析是保障系統穩定運行的核心能力之一。然而,不同開發團隊采用各異的日志打印方式,導致日志數據結構混亂,嚴重影響后續的收集、存儲、檢索與告警效率。 比如我們大部門就有多…

【鴻蒙HarmonyOS】鴻蒙app開發入門到實戰教程(三):實現一個音樂列表的頁面

鴻蒙里面,實現一個音樂播放的列表,模擬數組的數據展示 實現效果代碼實現 準備數據 songs:SongItemTypes[] [{img:https://yjy-teach-oss.oss-cn-beijing.aliyuncs.com/HeimaCloudMusic/0.jpg,name:直到世界的盡頭,author:WANDS},{img:https://yjy-teach-oss.oss-cn…

2025年滲透測試面試題總結-2025年HW(護網面試) 47(題目+回答)

安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 2025年HW(護網面試) 47 1. UDF提權 2. 命令執行與代碼執行的區別 3. 文件包含利用姿勢 4. 漏洞復現流程 …

iPhone 數據擦除軟件評測(最新且全面)

當您準備出售、捐贈或回收 iPhone 時,僅僅恢復出廠設置并不足以保證您的個人數據徹底消失。專業的 iPhone 數據擦除軟件采用先進的技術,確保您的敏感信息永久無法恢復。本文回顧了十種流行的 iPhone 數據擦除工具,詳細介紹了它們的功能、優點…

Qt 將觸摸事件轉換為鼠標事件(Qt4和Qt5及以上版本)

在Qt中,觸摸事件(QTouchEvent)和鼠標事件(QMouseEvent)是兩種不同的輸入事件類型。通常情況下,觸摸事件不會自動轉換為鼠標事件,因為它們代表的是不同的輸入設備(觸摸屏 vs 鼠標&…

Blender 云渲染高效流程:渲染 101 集群加速實戰?

一、核心優勢:適配 Blender 全場景需求? ? 全渲染器深度兼容? Cycles(CPU/GPU 模式):云端 4090 顯卡渲染速度比本地快 12 倍,支持 8K 分辨率 16K 紋理無壓力? Eevee 實時渲染:集群同步輸出預覽動畫&am…

SQL學習記錄01

什么是SQL? Structured Query Language (結構化查詢語言),與關系型數據庫進行通信的標準語言。什么是數據庫?“按照數據結構來組織、存儲、和管理數據的倉庫。”一個長期存儲在計算機內的、有組織的、可共享的、統一管…

醫療項目如何應對法規變更?

醫療項目應對法規變更的關鍵策略包括建立法規監測體系、及時內部培訓和溝通、調整業務流程和合規標準、技術系統快速迭代升級。 其中,建立有效的法規監測體系尤其重要。這意味著企業需要實時關注監管機構發布的政策更新和公告,迅速理解法規變化內容及對自…

AI Top10

AI 前十排名排名團隊/機構名稱國家核心優勢領域1DeepMind英國強化學習、Alpha系列模型2OpenAI美國GPT系列、多模態大模型3DeepSeek中國高效NLP模型、開源生態建設4Google Brain美國Transformer架構、TensorFlow框架5Meta AI (FAIR)美國計算機視覺、Llama系列模型6NVIDIA Resear…

LabVIEW通知器函數應用

介紹LabVIEW通知器(Notifier)函數,演示兩類并行循環通信場景:單對循環數據交互、多循環通知聚合,含程序框圖(數據發送 / 接收、多循環通知)與前面板(數據顯示)。功能說明…

推薦《Python 編程:從入門到實踐》之Python編程的基礎知識

在 Python 學習資源琳瑯滿目的當下,《Python 編程:從入門到實踐》脫穎而出,堪稱 Python 入門的不二之選。本書由經驗豐富的教育工作者撰寫,以清晰易懂的語言和循序漸進的方式,引領讀者從 Python 的基礎語法逐步邁向實際…

Kafka入門和基礎配置

目錄Kafka入門消息引擎系統ABC快速搞定Kafka術語kafka三層消息架構名詞術語Kafka基礎Kafka部署參考重要配置參數Broker端參數Topic級別參數JVM參數Kafka是消息引擎系統,也是分布式流處理平臺Kafka入門 消息引擎系統ABC 民間版:系統 A 發送消息給消息引…

OPENPPP2 VEthernet 網絡協議堆棧(CTCP)VNetStack 深度技術解析

🌐 OPENPPP2 VEthernet 網絡協議堆棧(CTCP)VNetStack 深度技術解析🏗? 一、系統架構全景圖 #mermaid-svg-FdlbKZCGQDDbvOL6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermai…

Gartner發布2025年中國網絡安全成熟度曲線:網絡安全的重點正轉向保護AI、推動業務轉型和增強組織韌性

網絡安全的重點正轉向保護人工智能、推動業務轉型和增強組織韌性。首席信息官及其安全和風險管理主管可以利用這份技術成熟度曲線來識別實用且高價值的技術和實踐,從而保持安全和敏捷。 戰略規劃假設 到2027年,60%的中國大型組織將在安全運營中心&#x…

網絡準入控制系統的作用解析,2025年保障企業入網安全第一道防線

在當今數字化時代,網絡已成為企業運營的基礎,隨著網絡的廣泛應用,網絡準入控制系統作為保障網絡安全的重要手段,正發揮著至關重要的作用。保障網絡安全網絡準入控制系統如同網絡的忠誠衛士,它為網絡大門安裝了智能鎖&a…

java基礎(day09)

目錄 1.繼承的作用 2.繼承樹 3.protected和super protected super 注:super/this()--構造方法,第一行,一般不同時出現 4.向上向下轉型 向上轉型 向下轉型 final 小結 1.繼承的作用 理解:首先就是可以實現代碼復用&#x…

如何進行選擇。

初始理解問題 首先,我們需要明確題目在問什么。題目“House Robber”描述的是一個強盜在一排房屋前,每個房屋都有一定數量的錢。強盜不能連續搶劫兩個相鄰的房屋,否則會觸發警報。目標是搶劫到最多的錢。 動態規劃的思路 這個問題可以使用動態…

PHP語法高級篇(三):Cookie與會話

Cookie與會話在 Web 編程中十分實用:Cookie 能實現一周免登錄,還能記住用戶的主題偏好;會話可保存當前用戶信息,也能臨時存儲購物車數據。本篇文章將記錄Cookie與會話的學習過程。 一、Cookie cookie 常用于識別用戶。cookie 是服…

11. JVM中的分代回收

1. JVM介紹和運行流程-CSDN博客 2. 什么是程序計數器-CSDN博客 3. java 堆和 JVM 內存結構-CSDN博客 4. 虛擬機棧-CSDN博客 5. JVM 的方法區-CSDN博客 6. JVM直接內存-CSDN博客 7. JVM類加載器與雙親委派模型-CSDN博客 8. JVM類裝載的執行過程-CSDN博客 9. JVM垃圾回收…

基于PaddleOCR的營業執照識別與數據分析系統

基于PaddleOCR的營業執照識別與數據分析系統 1. 項目概述 本項目旨在利用百度PaddleOCR技術識別營業執照圖片中的關鍵信息,結合自然語言處理(NLP)和卷積神經網絡(CNN)對OCR結果進行分類處理,最后對識別出的收入流水數據進行深度分析與可視化展示。系統將實現從圖像識別到數…