我想计算方阵X中的每个水平向量和方阵Y中每个水平向量之间的距离。
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。
size = 14000
X = np.random.rand(size,size)
Y = np.random.rand(size,size)
D = dist(X, Y)我怎样才能使它更完美呢?
发布于 2020-04-17 10:21:27
您可以使用cdist
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) 从文件中:
计算两个输入集合的每对之间的距离。
它可以处理一系列的距离,但默认情况下是欧几里德。
一个小片段:
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)输出
[[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. ]]https://stackoverflow.com/questions/61269230
复制相似问题