torch.cdist
是 PyTorch 中用于計算**兩個張量之間的成對距離(pairwise distance)**的函數,常用于點云處理、圖神經網絡、相似性度量等場景。
基本語法
torch.cdist(x1, x2, p=2.0)
參數說明:
參數 | 說明 |
---|---|
x1 | 一個形狀為 [B, M, D] 或 [M, D] 的張量,表示一組點。 |
x2 | 一個形狀為 [B, N, D] 或 [N, D] 的張量,表示另一組點。 |
p | 距離范數,默認 p=2.0 表示歐幾里得距離(L2 范數),也可以設為 1.0 (曼哈頓距離),或其他值。 |
輸出
輸出是一個張量,形狀為:
- 如果
x1.shape = [M, D]
和x2.shape = [N, D]
,則輸出形狀為[M, N]
; - 每個
(i, j)
位置表示x1[i]
和x2[j]
之間的距離。
示例
1. 簡單的 2D 歐幾里得距離
import torchx1 = torch.tensor([[0.0, 0.0], [1.0, 0.0]]) # 2個點
x2 = torch.tensor([[0.0, 1.0], [1.0, 1.0]]) # 2個點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點
x2 = torch.rand(2, 4, 3) # batch=2, 每組4個3D點out = torch.cdist(x1, x2) # 輸出形狀為 [2, 5, 4]
3. 使用不同范數
torch.cdist(x1, x2, p=1) # 曼哈頓距離
torch.cdist(x1, x2, p=2) # 歐幾里得距離(默認)
torch.cdist(x1, x2, p=inf) # 最大維度差
注意事項
x1
和x2
的最后一維(特征維度)必須相同。p=2
時效率最高,其他范數可能會慢一些。- 如果兩個張量都很大,這個操作可能非常耗顯存。
應用場景舉例
- 點云之間距離計算(如 ISS、FPFH、ICP)
- 匹配點對的距離圖構建
- KNN 查詢
- 圖構造(鄰接矩陣、相容性矩陣)
torch.sum
是 PyTorch 中用于對張量元素進行求和的函數,功能類似于 NumPy 中的 np.sum
,但可以更靈活地選擇維度進行操作。
基本用法
torch.sum(input, dim=None, keepdim=False)
參數說明:
input
:要進行求和的張量;dim
(可選):指定在哪個維度上進行求和;keepdim
(可選):布爾值,是否保留被求和的維度(默認不保留)。
示例講解
示例 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]])