張量與維度

3x4x5的張量:

x = torch.tensor([[[1, 2, 3, 4, 5],
? ? ? ? ? ? ? ? ? ?[6, 7, 8, 9, 10],
? ? ? ? ? ? ? ? ? ?[11, 12, 13, 14, 15],
? ? ? ? ? ? ? ? ? ?[16, 17, 18, 19, 20]],
? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? [[21, 22, 23, 24, 25],
? ? ? ? ? ? ? ? ? ?[26, 27, 28, 29, 30],
? ? ? ? ? ? ? ? ? ?[31, 32, 33, 34, 35],
? ? ? ? ? ? ? ? ? ?[36, 37, 38, 39, 40]],
? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? [[41, 42, 43, 44, 45],
? ? ? ? ? ? ? ? ? ?[46, 47, 48, 49, 50],
? ? ? ? ? ? ? ? ? ?[51, 52, 53, 54, 55],
? ? ? ? ? ? ? ? ? ?[56, 57, 58, 59, 60]]])

dim=0:代表3個元素的維度,每個元素是一個4x5的矩陣。
dim=1:代表4個元素的維度,每個元素是一個5維的向量。
dim=2:代表5個元素的維度,每個元素是一個標量。

?3 維 tensor 的sun操作理解

參考Pytorch從入門到實踐:dim維度的使用(終極版)_pytorch tensor dim-CSDN博客

3 個括號代表的維度從左往右分別為 0, 1, 2,在第 0 維遍歷得到矩陣,在第 1 維遍歷得到向量,在第 2 維遍歷得到標量

?更詳細一點

所以,我們明白了:標量,向量,矩陣, 三維張量之間的關系,三維張量里面包含了二維的矩陣,二維矩陣里面包含了一維的向量,一維向量里面包含了零維的標量。

b = torch.tensor([[[3, 2], [1, 4]], [[5, 6], [7, 8]]])
print(b)tensor([[[3, 2],[1, 4]],[[5, 6],[7, 8]]])

將 b 在第 0 維相加,第 0 維為最外層括號,最外層括號中的元素為矩陣[[3, 2], [1, 4]]和[[5, 6], [7, 8]]。在第 0 維求和,就是將第 0 維中的元素(矩陣)相加

s = torch.sum(b, dim=0)
print(s)
tensor([[ 8, ?8],[ 8, 12]])

?求 b 在第 1 維的和,就是將 b 第 1 維中的元素[3, 2]和[1, 4], [5, 6]和 [7, 8]相加,所以

?[3,2]+[1,4]=[4,6],[5,6]+[7,8]=[12,14]

s = torch.sum(b, dim=1)
print(s)
tensor([[ 4, ?6],[12, 14]])

則在 b 的第 2 維求和,就是對標量 3 和 2, 1 和 4, 5 和 6 , 7 和 8 求和

s = torch.sum(b, dim=2)
print(s)
tensor([[ 5, ?5],[11, 15]])

如果想要保持結果的維度不變,設置參數keepdim=True即可。

各階張量


0階張量(標量):

0階張量是一個單獨的數字或數值,沒有維度。
示例:x = 5
1階張量(向量):

1階張量是有序的一維數組,具有一個維度。
示例:x = [1, 2, 3, 4]
在PyTorch中,形狀表示為:(4,)
2階張量(矩陣):

2階張量是一個二維數組,具有兩個維度:行和列。
示例:x = [[1, 2], [3, 4]]
在PyTorch中,形狀表示為:(2, 2)
3階張量(三維數組):

3階張量是一個具有三個維度的數組,例如圖片數據,其中維度可以理解為高度、寬度和通道數。
示例:x = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
在PyTorch中,形狀表示為:(2, 2, 2)

dim

一些常見操作

import torch
x = torch.tensor([[0, 1, 2], [3, 4, 5]])  # shape (2, 3)
# 沿行(縱向)壓縮 → 每列求和
x.sum(dim=0)  # tensor([3, 5, 7])  shape (3,)
# 沿列(橫向)壓縮 → 每行求和
x.sum(dim=1)  # tensor([3, 12])    shape (2,)y = torch.tensor([[[1,2],[3,4]], [[5,6],[7,8]]])  # shape (2, 2, 2)
# 沿最外層維度壓縮 → 同位置元素取最大值
y.max(dim=0)  
# values: tensor([[5,6], [7,8]]), indices: tensor([[1,1], [1,1]])
# 沿中間維度壓縮 → 每行取最大值
y.max(dim=1)  
# values: tensor([[3,4], [7,8]]), indices: tensor([[1,1], [1,1]])x = torch.tensor([[1, 2], [3, 4]])  # (2, 2)
y = torch.tensor([[5, 6]])           # (1, 2)
# 沿行(dim=0)拼接 → 新增行
torch.cat([x, y], dim=0)  
# tensor([[1, 2],
#         [3, 4],
#         [5, 6]])  shape (3, 2)
# 錯誤示例:列數不匹配時 dim=0 會報錯!
z = torch.tensor([[7], [8]])  
torch.cat([x, z], dim=1)  # 正確:沿列拼接 → 新增列t = torch.arange(10).reshape(5, 2)  # (5, 2)
# 沿行(dim=0)切分為 2 行和 3 行
parts = t.split([2, 3], dim=0)  
# part1: shape (2, 2), part2: shape (3, 2)x = torch.zeros(3, 1, 2)  # (3, 1, 2)
x.squeeze(dim=1)  # 移除 dim=1 → (3, 2)
x.unsqueeze(dim=0)  # 在 dim=0 添加維度 → (1, 3, 1, 2)x = torch.randn(2, 3, 5)  # (2, 3, 5)
x.permute(2, 0, 1)        # 重排為 (5, 2, 3)

mean操作

import torch
x = torch.arange(24).view(2, 3, 4).float()  # 形狀 (2, 3, 4)
"""
x 內容:
[[[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.]],[[12., 13., 14., 15.],[16., 17., 18., 19.],[20., 21., 22., 23.]]]
"""

?不同維度的均值計算?:

?操作??計算邏輯??輸出形狀??結果?
x.mean(dim=0)沿通道(第0維)求平均(3, 4)[[6., 7., 8., 9.], [10., 11., 12., 13.], [14., 15., 16., 17.]]
x.mean(dim=1)沿寬度(第1維)求平均(2, 4)[[4., 5., 6., 7.], [16., 17., 18., 19.]]
x.mean(dim=2)沿高度(第2維)求平均(2, 3)[[1.5, 5.5, 9.5], [13.5, 17.5, 21.5]]
x.mean(dim=[1,2])沿寬度和高度同時求平均(2,)[5.5, 17.5]

dim=-2?的操作效果(三維張量等價于?dim=1):


將中間維度(大小為3)壓縮為1,結果形狀變為?(2, 1, 4)?→ 實際輸出?(2, 4)(因默認壓縮空維度),dim=k?表示沿維度?k?壓縮(該維度消失),

例如:

原始張量:? [3,3,4]? ->? [3,4]
[[[ 0, ?1, ?2, ?3], ? ?# 第1個矩陣
? [ 4, ?5, ?6, ?7],
? [ 8, ?9, 10, 11]],

?[[12, 13, 14, 15], ? ?# 第2個矩陣
? [16, 17, 18, 19],
? [20, 21, 22, 23]]]

沿 dim=-2 求和后: ?
[[ 12, 15, 18, 21], ? ?# 0+4+8, 1+5+9, ... ?
?[48, 51, 54, 57]] ? ? # 12+16+20, 13+17+21, ...

?

實際計算示例

假設場景:


transport = incident_lights * incident_areas * n_d_i? # 逐元素相乘:
# 結果維度:(num_pts, num_sample, 3)

# ? incident_lights: (num_pts, num_sample, 3)
# ? incident_areas:? ?(num_pts, num_sample, 1)
# ? n_d_i: ? ? ? ? ?(num_pts, num_sample, 1)

  • num_pts=1(1個表面點)
  • num_sample=2(2個采樣方向)
  • 數據:
    incident_lights = [[[1.0, 0.5, 0.2], [0.8, 0.3, 0.1]]]  # (1,2,3)
    incident_areas = [[0.6], [0.6]]                         #  (1,2,1)
    n_d_i         = [[[0.9], [0.7]]]                       # (1,2,1)

分步計算:

# 第一步:逐元素相乘
term1 = incident_lights * incident_areas # [[[1.0 * 0.6, 0.5 * 0.6, 0.2 * 0.6] = [0.6, 0.3, 0.12]# [0.8 * 0.6, 0.3 * 0.6, 0.1 * 0.6] = [0.48, 0.18, 0.06]]]
term2 = term1 * n_d_i    # [[[0.6 * 0.9, 0.3 * 0.9, 0.12 * 0.9] = [0.54, 0.27, 0.108]# [0.48 * 0.7, 0.18 * 0.7, 0.06 * 0.7] = [0.336, 0.126, 0.042]]]# 第二步:沿采樣維度(dim=-2)求平均
diffuse_light = term2.mean(dim=-2) # [(0.54+0.336)/2, (0.27+0.126)/2, (0.108+0.042)/2]# = [0.438, 0.198, 0.075]

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

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

相關文章

智慧菜場系統(源碼+文檔+講解+演示)

引言 在數字化浪潮的推動下,傳統菜市場也在尋求創新與變革。智慧菜場系統作為一種新型的菜市場管理工具,通過數字化手段優化菜市場的全流程,提高運營效率,增強消費者體驗,提升市場管理質量。本文將詳細介紹智慧菜場系統…

【GESP】C++一級真題 luogu-B4355 [GESP202506 一級] 值日

GESP C一級,2025年6月真題,基礎運算和循環語句,難度★☆☆☆☆。 題目題解詳見:【GESP】C一級真題 luogu-B4355 [GESP202506 一級] 值日 | OneCoder 【GESP】C一級真題 luogu-B4355 [GESP202506 一級] 值日 | OneCoderGESP C一級…

【Linux應用】Ubuntu20.04 aarch64開發板一鍵安裝ROS2(清華源)

【Linux應用】Ubuntu20.04 aarch64開發板一鍵安裝ROS2(清華源) 文章目錄相關資料更改UTF8執行更新一鍵安裝ROS2驗證配置環境變量附錄:開發板快速上手:鏡像燒錄、串口shell、外設掛載、WiFi配置、SSH連接、文件交互(RAD…

【HDLBits習題 2】Circuit - Sequential Logic(4)More Circuits

1. Rule90&#xff08;Rule 90&#xff09;方法1&#xff1a;module top_module (output reg [511:0] q,input clk,input load,input [511:0] data ); integer i;always (posedge clk) beginif (load 1b1) beginq < data;end else beginfor (i0; i<$bits(q);…

基于mysqlfrm工具解析mysql數據結構文件frm表結構和數據庫版本信息

這里使用Linux系統上操作。win上搞了下 python報錯。所以在這里記錄一下推薦大家使用linux系統操作。 安裝mysql utilswget https://downloads.mysql.com/archives/get/p/30/file/mysql-utilities-1.6.5.tar.gztar -xf mysql-utilities-1.6.5.tar.gzcd mysql-utilities-1.6.5py…

【C++ 深入解析 C++ 模板中的「依賴類型」】

深入解析 C 模板中的「依賴類型」 依賴類型是 C 模板編程中的核心概念&#xff0c;特指那些依賴于模板參數的類型。迭代器是依賴類型的常見例子&#xff0c;但遠不止于此。讓我們全面解析這個重要概念&#xff1a; 依賴類型的本質定義 依賴類型是&#xff1a; 在模板中定義直接…

Telnet遠程連接實驗(Cisco)

Telnet遠程連接實驗&#xff08;Cisco&#xff09; 拓撲圖一并實現DHCP服務、HTTP服務、FTP服務。 二層交換機配置&#xff1a; 交換機Switch0配置&#xff1a; vlan 10vlan 20int f0/1switchport mode accessswitchport access vlan 10int f0/2switchport mode accessswitchpo…

C++:非類型模板參數,模板特化以及模板的分離編譯

目錄 一、前言 二、非類型模板參數 三、模板的特化 3.1 類模板特化 3.11 全特化 3.12 偏特化 3.2 函數模板特化 3.3 注意 四、模板的分離編譯 一、前言 前面的文章梳理了模板初階的一些用法&#xff0c;在后面梳理了STL的一些容器的用法后&#xff0c;下面將用到含有S…

【Qt 學習之路】Qt Android開發環境搭建:Ubuntu的Vmware虛擬機中的踩坑實錄

文章目錄1、簡介2、虛擬機內USB設備識別難題2.1、正確連接手機2.2、打開USB相關配置2.3、打開虛擬機中的手機設備3、Gradle下載速度緩慢之困3.1、下載 Gradle 鏡像3.2、安放鏡像位置3.3、修改項目中的gradle路徑1、簡介 許久未曾使用Qt進行Android開發&#xff0c;今日在Ubunt…

MySQL中使用group_concat遇到的問題及解決

在使用group_concat的過程中遇到個問題&#xff0c;這里記錄一下&#xff1a;在MySQL中有個配置參數group_concat_max_len&#xff0c;它會限制使用group_concat返回的最大字符串長度&#xff0c;默認是1024。 查詢group_concat_max_len大小&#xff1a; show variables like…

高性能小型爬蟲語言與代碼示例

高性能小型爬蟲現在有哪幾種新興語言可以選擇。我看到了很多關于爬蟲框架的信息&#xff0c;特別是使用Go語言和Node.js的框架。Go語言方面有Kaola1和Katana2這兩個框架。Kaola被描述為高性能的Go語言爬蟲框架&#xff0c;輕量級且強大&#xff0c;提供靈活配置選項。 Node.js…

【PTA數據結構 | C語言版】在順序表 list 中查找元素 x

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n 個整數存入順序表&#xff0c;對任一給定整數 x&#xff0c;查找其在順序表中的位置。 輸入格式&#xff1a; 輸入首先在第一行給出正整數 n&#xff08;≤10^4 &#…

claude code-- 基于Claude 4 模型的智能編程工具,重塑你的編程體驗

文章目錄0.前言1.安裝nodejs2.使用指南3.快速上手4.總結0.前言 最近的這個claudecode非常的火&#xff0c;因為可能是這個cursoe定價的一些原因吧&#xff0c;我是聽其他的這個大佬說的&#xff0c;因為這個cursor其實我就是最開始的使用用過一下&#xff0c;現在基本上不使用…

HTTP API 身份認證

互聯網系統通常需要根據用戶身份決定是否有資源的訪問權限&#xff0c;這就需要對用戶進行身份認證&#xff08;Authentication&#xff09;&#xff0c;驗證用戶所聲稱的身份。驗證手段通常是驗證只有用戶知道或擁有的東西&#xff0c;比如密碼、手機號、指紋等。 基于瀏覽器…

Python畢業設計232—基于python+Django+vue的圖書管理系統(源代碼+數據庫)

畢設所有選題&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于pythonDjangovue的圖書管理系統(源代碼數據庫)232 一、系統介紹 本項目前后端分離&#xff0c;分為用戶、管理員兩種角色 1、用戶&#xff1a; 注冊、登錄、新聞資訊、圖書信…

Koa+Puppeteer爬蟲教程頁面設計

當我使用Koa作為web服務器&#xff0c;Puppeteer作為爬蟲工具來編寫一個簡單的爬蟲教程時&#xff0c;發生了戲劇性的一幕。 下面我將創建一個完整的Koa Puppeteer爬蟲教程頁面&#xff0c;包含代碼示例、執行演示和詳細說明。設計思路 左側為教程內容區域右側為實時爬蟲演示區…

云成本優化完整指南:從理論到實踐的全方位解決方案

目錄 引言:云成本管理的重要性云成本優化的核心原則成本分析與監控體系立即行動的快速優化策略中期架構優化方案長期成本治理體系多云環境成本管理實施路線圖與最佳實踐案例研究與效果評估總結與展望引言:云成本管理的重要性 {#引言} 在數字化轉型的浪潮中,

計算機學科專業基礎綜合(408)四門核心課程的知識點總結

一、數據結構&#xff08;Data Structure&#xff09; 數據結構是 “如何高效組織和處理數據” 的學科&#xff0c;核心是邏輯結構&#xff08;數據間的關系&#xff09;和物理結構&#xff08;數據在內存中的存儲方式&#xff09;&#xff0c;以及基于這兩種結構的操作算法。 …

JVM GC長暫停問題排查

JVM GC長暫停問題排查 現象 名詞&#xff1a;GC 垃圾回收&#xff08;Garbage Collection&#xff09;分類 計算機科學 在高并發下&#xff0c;Java程序的GC問題屬于很典型的一類問題&#xff0c;帶來的影響往往會被進一步放大。不管是「GC頻率過快」還是「GC耗時太長」&#x…

前端開發中的難題及解決方案

在前端開發過程中&#xff0c;開發者常常會遇到各種棘手的問題&#xff0c;這些問題不僅影響開發效率&#xff0c;還可能對產品質量和用戶體驗造成負面影響。下面詳細探討常見難題及有效解決方案。一、跨瀏覽器兼容性問題難題表現&#xff1a;不同瀏覽器&#xff08;如 Chrome、…