我想从向量a
和b
中计算协方差矩阵,比如k[i][j] = exp( -(a[i]-b[j])**2 )
。
在numpy中,我可以这样写,
import numpy as np
r = np.subtract.outer(a, b)
k = np.exp(-r*r)
在PyTorch中,我可以编写简单的代码,但它比numpy慢。
import torch
for i in range(len(a)):
for j in range(len(b)):
k[i][j] = torch.exp( -(a[i]-b[j])**2 )
如何使用PyTorch编写高效的代码?
发布于 2021-11-02 16:46:38
你可以使用广播:
r = a[:, None] - b[None, :]
k = torch.exp(-r**2)
发布于 2021-11-02 16:47:54
我将使用重塑和乘法ndims数组的产品:
k = torch.exp(- (a.reshape(-1,1)*b.reshape(1,-1))**2)
编辑
此外,此方法在numpy中也有效:
k = np.exp(- (a.reshape(-1,1)*b.reshape(1,-1))**2)
https://stackoverflow.com/questions/69813844
复制相似问题