PyTorch中cdist和sum函數(shù)使用示例詳解
torch.cdist 是 PyTorch 中用于計算**兩個張量之間的成對距離(pairwise distance)**的函數(shù),常用于點(diǎn)云處理、圖神經(jīng)網(wǎng)絡(luò)、相似性度量等場景。
基本語法
torch.cdist(x1, x2, p=2.0)
參數(shù)說明:
| 參數(shù) | 說明 |
|---|---|
x1 | 一個形狀為 [B, M, D] 或 [M, D] 的張量,表示一組點(diǎn)。 |
x2 | 一個形狀為 [B, N, D] 或 [N, D] 的張量,表示另一組點(diǎn)。 |
p | 距離范數(shù),默認(rèn) p=2.0 表示歐幾里得距離(L2 范數(shù)),也可以設(shè)為 1.0(曼哈頓距離),或其他值。 |
輸出
輸出是一個張量,形狀為:
- 如果
x1.shape = [M, D]和x2.shape = [N, D],則輸出形狀為[M, N]; - 每個
(i, j)位置表示x1[i]和x2[j]之間的距離。
示例
1. 簡單的 2D 歐幾里得距離
import torch x1 = torch.tensor([[0.0, 0.0], [1.0, 0.0]]) # 2個點(diǎn) x2 = torch.tensor([[0.0, 1.0], [1.0, 1.0]]) # 2個點(diǎn) dist = torch.cdist(x1, x2, p=2) print(dist)
輸出為:
tensor([[1.0000, 1.4142],
[1.4142, 1.0000]])
即:
- x1[0] 與 x2[0] 的距離為 1;
- x1[0] 與 x2[1] 的距離為 sqrt(2),等等。
2. 批量形式(3D Tensor)
x1 = torch.rand(2, 5, 3) # batch=2, 每組5個3D點(diǎn) x2 = torch.rand(2, 4, 3) # batch=2, 每組4個3D點(diǎn) out = torch.cdist(x1, x2) # 輸出形狀為 [2, 5, 4]
3. 使用不同范數(shù)
torch.cdist(x1, x2, p=1) # 曼哈頓距離 torch.cdist(x1, x2, p=2) # 歐幾里得距離(默認(rèn)) torch.cdist(x1, x2, p=inf) # 最大維度差
注意事項
x1和x2的最后一維(特征維度)必須相同。p=2時效率最高,其他范數(shù)可能會慢一些。- 如果兩個張量都很大,這個操作可能非常耗顯存。
應(yīng)用場景舉例
- 點(diǎn)云之間距離計算(如 ISS、FPFH、ICP)
- 匹配點(diǎn)對的距離圖構(gòu)建
- KNN 查詢
- 圖構(gòu)造(鄰接矩陣、相容性矩陣)
torch.sum 是 PyTorch 中用于對張量元素進(jìn)行求和的函數(shù),功能類似于 NumPy 中的 np.sum,但可以更靈活地選擇維度進(jìn)行操作。
基本用法
torch.sum(input, dim=None, keepdim=False)
參數(shù)說明:
input:要進(jìn)行求和的張量;dim(可選):指定在哪個維度上進(jìn)行求和;keepdim(可選):布爾值,是否保留被求和的維度(默認(rèn)不保留)。
示例講解
示例 1:對所有元素求和
x = torch.tensor([[1, 2], [3, 4]]) torch.sum(x) # 輸出:tensor(10)
示例 2:指定維度求和
x = torch.tensor([[1, 2], [3, 4]]) torch.sum(x, dim=0) # 按列求和:1+3, 2+4 # 輸出:tensor([4, 6]) torch.sum(x, dim=1) # 按行求和:1+2, 3+4 # 輸出:tensor([3, 7])
示例 3:保留維度
x = torch.tensor([[1, 2], [3, 4]]) torch.sum(x, dim=1, keepdim=True) # 輸出:tensor([[3], [7]])
到此這篇關(guān)于PyTorch中cdist和sum函數(shù)使用示例詳解的文章就介紹到這了,更多相關(guān)PyTorch cdist和sum函數(shù)使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?Flask實(shí)現(xiàn)圖片上傳與下載的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python和Flask實(shí)現(xiàn)圖片上傳與下載(支持漂亮的拖拽上傳),文中示例代碼講解詳細(xì),感興趣的可以了解一下2022-05-05
django Layui界面點(diǎn)擊彈出對話框并請求邏輯生成分頁的動態(tài)表格實(shí)例
這篇文章主要介紹了django Layui界面點(diǎn)擊彈出對話框并請求邏輯生成分頁的動態(tài)表格實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
使用pyqt5 實(shí)現(xiàn)ComboBox的鼠標(biāo)點(diǎn)擊觸發(fā)事件
這篇文章主要介紹了使用pyqt5 實(shí)現(xiàn)ComboBox的鼠標(biāo)點(diǎn)擊觸發(fā)事件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
基于Python實(shí)現(xiàn)PDF批量轉(zhuǎn)化工具
這篇文章主要為大家詳細(xì)介紹了如何基于Python制作一個PDF批量轉(zhuǎn)化工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
Python中json.loads和json.dumps方法中英雙語詳解
在Python中json.loads和json.dumps是處理JSON數(shù)據(jù)的重要方法,json.loads用于將JSON字符串解析為Python對象,而json.dumps用于將Python對象序列化為JSON字符串,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
Python秒算24點(diǎn)實(shí)現(xiàn)及原理詳解
這篇文章主要介紹了Python秒算24點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07

