首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何优化两个矩阵的所有向量之间的计算距离?

如何优化两个矩阵的所有向量之间的计算距离?
EN

Stack Overflow用户
提问于 2020-04-17 10:19:23
回答 1查看 49关注 0票数 0

我想计算方阵X中的每个水平向量和方阵Y中每个水平向量之间的距离。

代码语言:javascript
复制
import numpy as np
from tqdm import tqdm

def euclidean_dist(x, y) -> float:
    return np.linalg.norm(x - y)

def dist(X, Y):

    def calc(y):
        def calc2(x):
            return euclidean_dist(x, y)
        return calc2

    distances = [np.apply_along_axis(calc(y), 1, X) for y in tqdm(Y)]
    return np.asarray(distances)

对于小矩阵,它工作得很好,而对于大型矩阵,它却非常慢。例如,对于大小为14000 tqdm的矩阵,估计时间为2h。

代码语言:javascript
复制
size = 14000
X = np.random.rand(size,size)
Y = np.random.rand(size,size)
D = dist(X, Y)

我怎样才能使它更完美呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-17 10:21:27

您可以使用cdist

代码语言:javascript
复制
import numpy as np
from scipy.spatial.distance import cdist

size = 14000
X = np.random.rand(size, size)
Y = np.random.rand(size, size)

result = cdist(X, Y)  

从文件中:

计算两个输入集合的每对之间的距离。

它可以处理一系列的距离,但默认情况下是欧几里德。

一个小片段:

代码语言:javascript
复制
import numpy as np
from scipy.spatial.distance import cdist


coords = [(35.0456, -85.2672),
          (35.1174, -89.9711),
          (35.9728, -83.9422),
          (36.1667, -86.7833)]
result = cdist(coords, coords, 'euclidean')
print(result)

输出

代码语言:javascript
复制
[[0.         4.70444794 1.6171966  1.88558331]
 [4.70444794 0.         6.0892811  3.35605413]
 [1.6171966  6.0892811  0.         2.84770898]
 [1.88558331 3.35605413 2.84770898 0.        ]]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61269230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档