如何在PyTorch中计算两个向量的成对距离?
PyTorch中的向量是一维张量。为了计算两个向量之间的成对距离,我们可以使用**PairwiseDistance()**函数。它使用**p-范数**来计算成对距离。**PairwiseDistance**基本上是**torch.nn**模块提供的类。
两个向量的尺寸必须相同。
可以针对实值和复值输入计算成对距离。
向量必须为**[N,D]**形状,其中**N**是批次维度,**D**是向量维度。
语法
torch.nn.PairwiseDistance(p=2)
默认的**p**设置为2。
步骤
您可以使用以下步骤来计算两个向量之间的成对距离
导入所需的库。在以下所有示例中,所需的Python库是**torch**。确保您已经安装了它。
import torch
定义两个向量或两批向量并打印它们。您可以定义实值或复值张量。
v1 = torch.randn(3,4) v2 = torch.randn(3,4)
创建一个**PairwiseDistance**实例来计算两个向量之间的成对距离。
pdist = torch.nn.PairwiseDistance(p=2)
计算上面定义的向量之间的成对距离。
output = pdist (v1, v2)
打印包含成对距离值的计算张量。
print("Pairwise Distance:", output)
示例1
在这个程序中,我们计算两个一维向量之间的成对距离。请注意,我们已经对向量进行了unsqueeze操作以使其成为批处理。
# python3 program to compute pairwise distance between # the two 1D vectors/ tensors import torch # define first vector v1 = torch.tensor([1.,2.,3.,4.]) # size is [4] # unsqueeze v1 to make it of size [1,4] v1 = torch.unsqueeze(v1,0) print("Size of v1:",v1.size()) # define and unsqueeze second vector v2 = torch.tensor([2.,3.,4.,5.]) v2 = torch.unsqueeze(v2, 0) print("Size of v2:",v2.size()) print("Vector v1:
", v1) print("Vector v2:
", v2) # create an instance of the PairwiseDistance pdist = torch.nn.PairwiseDistance(p=2) # compute the distance output = pdist(v1, v2) # display the distance print("Pairwise Distance:
",output)
输出
Size of v1: torch.Size([1, 4]) Size of v2: torch.Size([1, 4]) Vector v1: tensor([[1., 2., 3., 4.]]) Vector v2: tensor([[2., 3., 4., 5.]]) Pairwise Distance: tensor([2.0000])
示例2
在这个程序中,我们计算两批一维向量之间的成对距离。
# python3 program to compute pairwise distance between # a batch vectors/ tensors import torch # define first batch of 3 vectors v1 = torch.rand(3,4) print("Size of v1:",v1.size()) # define second batch of 3 vectors v2 = torch.rand(3,4) print("Size of v2:",v2.size()) print("Vector v1:
", v1) print("Vector v2:
", v2) # define function to compute pairwise distance pdist = torch.nn.PairwiseDistance(p=2) # compute the distance output = pdist(v1, v2) # display the distances print("Pairwise Distance:
",output)
输出
Size of v1: torch.Size([3, 4]) Size of v2: torch.Size([3, 4]) Vector v1: tensor([[0.7245, 0.7953, 0.6502, 0.9976], [0.1185, 0.6365, 0.3543, 0.3417], [0.7827, 0.3520, 0.5634, 0.0534]]) Vector v2: tensor([[0.6419, 0.2966, 0.4424, 0.6570], [0.5991, 0.4173, 0.5387, 0.1531], [0.8377, 0.6622, 0.8260, 0.8249]]) Pairwise Distance: tensor([0.6441, 0.5904, 0.8737])
广告