Python 3.x 用高斯函数计算同一矩阵中元素之间的距离有没有更快的方法?
从形状为7000 x 2的M矩阵开始,我计算以下数量: 我按以下方式进行(方差σ是任意的):Python 3.x 用高斯函数计算同一矩阵中元素之间的距离有没有更快的方法?,python-3.x,performance,distance,gaussian,Python 3.x,Performance,Distance,Gaussian,从形状为7000 x 2的M矩阵开始,我计算以下数量: 我按以下方式进行(方差σ是任意的): 问题是它真的很慢(大约需要30分钟)。有没有更快的方法进行计算?也许你可以从以下评论中提取一些想法: 1) 计算Log(W[i,j])通过公式的简化,指数消失,处理速度应更快 2) 取它的指数:Exp(Log(W{i,j])==W[i,j] 3) 将变量用于迭代内的常量值,如sigma=2*sigma**2,您可以在迭代外开始计算 重要的是,在进行任何更改之前,记住结果,以便您的新开发可以在您已经知道
问题是它真的很慢(大约需要30分钟)。有没有更快的方法进行计算?也许你可以从以下评论中提取一些想法: 1) 计算Log(W[i,j])通过公式的简化,指数消失,处理速度应更快 2) 取它的指数:Exp(Log(W{i,j])==W[i,j] 3) 将变量用于迭代内的常量值,如sigma=2*sigma**2,您可以在迭代外开始计算 重要的是,在进行任何更改之前,记住结果,以便您的新开发可以在您已经知道的最终矩阵结果上进行测试,我想,这是正确的 祝你好运
W = np.zeros((M.shape[0], M.shape[0]))
elements_sum_by_i = np.zeros((M.shape[0]))
for i in range (0,M.shape[0]):
#normalization
for k in range (0, M.shape[0]):
elements_sum_by_i[k] = math.exp(-(np.linalg.norm(M[i,:] - M[k,:])**2)/(2*sigma**2))
sum_by_i = sum(elements_sum_by_i)
#calculation
for j in range (0,M.shape[0]):
W[i,j] = (math.exp(-(np.linalg.norm(M[i,:] - M[j,:]))**2/(2*sigma**2)))/(sum_by_i)