Pytorch中距离矩阵的一般计算
我有两个形状为Pytorch中距离矩阵的一般计算,pytorch,linear-algebra,Pytorch,Linear Algebra,我有两个形状为(m,n)的张量a和b,我想用一些距离度量d计算距离矩阵m。也就是说,我想要m[I][j]=d(a[I],b[j])。这有点像cdist(a,b),但假设通用距离函数d,它不一定是p-范数距离。在PyTorch中是否有一种通用的实现方法 还有一个更具体的附带问题:是否有一种有效的方法来使用以下指标执行此操作 d(x,y) = 1 - cos(x,y) 编辑 我已经用答案解决了上述具体案例: 我建议使用广播:因为a,b都有形状(m,n)你可以计算 m = d( a[None, :,
(m,n)
的张量a
和b
,我想用一些距离度量d
计算距离矩阵m
。也就是说,我想要m[I][j]=d(a[I],b[j])
。这有点像cdist(a,b)
,但假设通用距离函数d
,它不一定是p-范数距离。在PyTorch中是否有一种通用的实现方法
还有一个更具体的附带问题:是否有一种有效的方法来使用以下指标执行此操作
d(x,y) = 1 - cos(x,y)
编辑
我已经用答案解决了上述具体案例:
我建议使用广播:因为
a,b
都有形状(m,n)
你可以计算
m = d( a[None, :, :], b[:, None, :])
其中,d
需要对最后一个维度进行操作,例如
def d(a,b): return 1 - (a * b).sum(dim=2) / a.pow(2).sum(dim=2).sqrt() / b.pow(2).sum(dim=2).sqrt()
(这里我假设
cos(x,y)
表示x
和y
之间的标准化内积)我不知道有这样的函数。请附上一些代码,你是否尝试实现它?我不知道如何开始。我已经根据答案解决了这个小问题。我再加上。
def d(a,b): return 1 - (a * b).sum(dim=2) / a.pow(2).sum(dim=2).sqrt() / b.pow(2).sum(dim=2).sqrt()