Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 用高斯函数计算同一矩阵中元素之间的距离有没有更快的方法?_Python 3.x_Performance_Distance_Gaussian - Fatal编程技术网

Python 3.x 用高斯函数计算同一矩阵中元素之间的距离有没有更快的方法?

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,您可以在迭代外开始计算 重要的是,在进行任何更改之前,记住结果,以便您的新开发可以在您已经知道

从形状为7000 x 2的M矩阵开始,我计算以下数量:

我按以下方式进行(方差σ是任意的):


问题是它真的很慢(大约需要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)