我有两个包含n个坐标的numpy数组(每行包含两个项目)。
coords_a = np.random.random((20, 2))
coords_b = np.random.random((20, 2))
现在,对于每一行的组合,我想要计算一个函数,并将返回值保存为矩阵中的项。因此,结果数组应该具有形状(20, 20)
,并且可以像下面展示的那样“延迟”计算。作为示例函数,使用欧几里得距离。
def euclidean_dist(x1: float, y1: float, x2: float, y2: float) -> float:
"""Return the euclidean distance between two the points (x1, y1) and (x2, y2)."""
return np.sqrt(np.square(x1 - x2) + np.square(y1 - y2))
matrix = []
for a in coords_a:
row = []
for b in coords_b:
row.append(euclidean_dist(*a, *b))
matrix.append(row)
matrix = np.array(matrix)
正如您所想象的那样,这个嵌套的for循环非常耗时,仅使用2000个坐标对就需要超过25秒钟。 是否有建议的向量化方法来处理这种叉积运算?
提前感谢。